如何使按钮触发的脚本运行还没停按另个按钮就触发其事件并停止以前的脚本[已解决]
本帖最后由 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
还怎么使其有按下其中按钮后循环相应的事件,按住热键后暂停,再按下热键就继续循环,当按下其他按钮后终止其循环并运行所按下按钮触发的事件? 求助大侠们帮忙。 哥们,我建议你还是先把基本的东西好好看看吧,加上你的另一个标题,似乎写了给你,你也不清楚是怎么回事 与二楼同感。即使替你写出来,你也是满脑子问号 GUI生成模式 改成 EVENT的. 谢啦。这类的教材太分散啦。我得好好收集下。学习下。有好教材的谢谢提供 事件模式应该可以很好的实现吧 #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事件
至于热键暂停,论坛例子够多的了,自行搜索 感谢楼上,学习啦 :face (35)::face (35)::face (35): 7楼,麻烦啦。如果把MsgBox(0, '数字', '123', 1)和MsgBox(0, '英文', 'ABC', 1)换成楼主发送的数字,和字母的代码时候,遇到从1写到19的中间过程无法转换到字母。在没写到19前按B按键无效的问题,还有在运行你写的代码中,按下(A或B)按钮后‘$Form1 = GUICreate("数字 字母", 241, 105, 388, 180)’窗口的关闭按钮无效,无法关闭。以上问题求正解. 这问题好像是AU3的单线程无法多线程造成的
把SLEEP(1000)改造,可能能够解决问题 有人回答下呗。等啦好几天啦。没个满意答案 还是把根打扎实些好 回复 13# yusky
请回答出来,然后再说这些没劲的话,别人云亦云,这不是什么好做风。 参考http://www.autoitx.com/forum.php?mod=viewthread&tid=13290后问题解决
页:
[1]
2