chnlikang 发表于 2010-5-16 00:39:58

如何使按钮触发的脚本运行还没停按另个按钮就触发其事件并停止以前的脚本[已解决]

本帖最后由 chnlikang 于 2010-5-20 07:54 编辑


#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ACN_String.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("数字 字母", 241, 105, 388, 180)
$Button1 = GUICtrlCreateButton("数字", 24, 32, 73, 41)
$Button2 = GUICtrlCreateButton("字母", 128, 32, 83, 41)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        While 1
                          Sleep(1000)
                          SendX("1",0)
                          Send("{ENTER}")
                          Sleep(1000)
                          SendX("2",0)
                          Send("{ENTER}")
                          SendX("3",0)
                                Send("{ENTER}")
                          Sleep(1000)
                          SendX("4",0)
                          Send("{ENTER}")
                          Sleep(1000)
                          SendX("5",0)
                          Send("{ENTER}")
                          Sleep(1000)
                          SendX("6",0)
                                Send("{ENTER}")
                          Sleep(1000)
                          SendX("7",0)
                          Send("{ENTER}")
                            Sleep(1000)
                          SendX("8",0)
                          Send("{ENTER}")
                          Sleep(1000)
                          SendX("9",0)
                          Send("{ENTER}")
                          Sleep(1000)
                          SendX("10",0)
                          Send("{ENTER}")
                          Sleep(1000)
                         SendX("11",0)
                          Send("{ENTER}")
                          Sleep(1000)
                          SendX("12",0)
                          Send("{ENTER}")
                          Sleep(1000)
                          SendX("13",0)
                          Send("{ENTER}")
                          Sleep(1000)
                          SendX("14",0)
                          Send("{ENTER}")
                          Sleep(1000)
                          SendX("15",0)
                          Send("{ENTER}")
                          Sleep(1000)
                          SendX("16",0)
                          Send("{ENTER}")
                          Sleep(1000)
                          SendX("17",0)
                         Send("{ENTER}")
                          Sleep(1000)
                          SendX("18",0)
                          Send("{ENTER}")
                          Sleep(1000)
                          SendX("19",0)
                          Send("{ENTER}")
                        WEnd
                Case $Button2
                        While 1
                                  Sleep(1000)
                          SendX("A",0)
                          Send("{ENTER}")
                          Sleep(1000)
                          SendX("B",0)
                          Send("{ENTER}")
                          SendX("C",0)
                                Send("{ENTER}")
                          Sleep(1000)
                          SendX("D",0)
                          Send("{ENTER}")
                          Sleep(1000)
                          SendX("E",0)
                          Send("{ENTER}")
                          Sleep(1000)
                          SendX("F",0)
                                Send("{ENTER}")
                          Sleep(1000)
                          SendX("G",0)
                          Send("{ENTER}")
                            Sleep(1000)
                          SendX("H",0)
                          Send("{ENTER}")
                          Sleep(1000)
                          SendX("I",0)
                          Send("{ENTER}")
                          Sleep(1000)
                          SendX("J",0)
                          Send("{ENTER}")
                        WEnd       
        EndSwitch
WEnd
还怎么使其有按下其中按钮后循环相应的事件,按住热键后暂停,再按下热键就继续循环,当按下其他按钮后终止其循环并运行所按下按钮触发的事件? 求助大侠们帮忙。

netegg 发表于 2010-5-16 07:20:10

哥们,我建议你还是先把基本的东西好好看看吧,加上你的另一个标题,似乎写了给你,你也不清楚是怎么回事

foboy 发表于 2010-5-16 07:55:21

与二楼同感。即使替你写出来,你也是满脑子问号

lanfengc 发表于 2010-5-16 11:58:17

GUI生成模式 改成 EVENT的.

chnlikang 发表于 2010-5-16 12:57:32

谢啦。这类的教材太分散啦。我得好好收集下。学习下。有好教材的谢谢提供

awfymwvf 发表于 2010-5-16 20:08:16

事件模式应该可以很好的实现吧

lynfr8 发表于 2010-5-16 21:12:20

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ACN_String.au3>
$Form1 = GUICreate("数字 字母", 241, 105, 388, 180)
$Button1 = GUICtrlCreateButton("数字", 24, 32, 73, 41)
$Button2 = GUICtrlCreateButton("字母", 128, 32, 83, 41)
GUISetState(@SW_SHOW)
GUIRegisterMsg(0x0111, 'WM_COMMAND')
$pause = True
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        $pause = False
                        While 1
                                If $pause Then
                                        MsgBox(0, '注意', '变身字母...', 2)
                                        ExitLoop
                                EndIf
                                Sleep(1000)
                                MsgBox(0, '数字', '123', 1)
                        WEnd
                Case $Button2
                        $pause = True
                        While 1
                                If $pause = False Then
                                        MsgBox(0, '注意', '变身数字...', 2)
                                        ExitLoop
                                EndIf
                                Sleep(1000)
                                MsgBox(0, '英文', 'ABC', 1)
                        WEnd
        EndSwitch
WEnd

Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
        If $pause = False And $lParam = GUICtrlGetHandle($Button2) Then
                $pause = True
        ElseIf $pause = True And $lParam = GUICtrlGetHandle($Button1) Then
                $pause = False
        EndIf
        ;MsgBox(0,0,$lParam&$pause)
EndFunc 关键点:
GUIRegisterMsg(0x0111, 'WM_COMMAND')
$pause的逻辑表达式的布尔值和$lParam按钮句柄判断

解决问题:按下A按钮终止B循环并运行A事件,按下B按钮终止A循环并运行B事件
至于热键暂停,论坛例子够多的了,自行搜索

chnlikang 发表于 2010-5-17 16:50:11

感谢楼上,学习啦

chnlikang 发表于 2010-5-17 17:08:24

:face (35)::face (35)::face (35):

chnlikang 发表于 2010-5-18 01:21:55

7楼,麻烦啦。如果把MsgBox(0, '数字', '123', 1)和MsgBox(0, '英文', 'ABC', 1)换成楼主发送的数字,和字母的代码时候,遇到从1写到19的中间过程无法转换到字母。在没写到19前按B按键无效的问题,还有在运行你写的代码中,按下(A或B)按钮后‘$Form1 = GUICreate("数字 字母", 241, 105, 388, 180)’窗口的关闭按钮无效,无法关闭。以上问题求正解.

seniors 发表于 2010-5-18 11:56:47

这问题好像是AU3的单线程无法多线程造成的
把SLEEP(1000)改造,可能能够解决问题

chnlikang 发表于 2010-5-19 10:30:44

有人回答下呗。等啦好几天啦。没个满意答案

yusky 发表于 2010-5-20 00:31:11

还是把根打扎实些好

chnlikang 发表于 2010-5-20 07:43:43

回复 13# yusky
请回答出来,然后再说这些没劲的话,别人云亦云,这不是什么好做风。

chnlikang 发表于 2010-5-20 08:28:09

参考http://www.autoitx.com/forum.php?mod=viewthread&tid=13290后问题解决
页: [1] 2
查看完整版本: 如何使按钮触发的脚本运行还没停按另个按钮就触发其事件并停止以前的脚本[已解决]