找回密码
 加入
搜索
查看: 8583|回复: 15

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

 火.. [复制链接]
发表于 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
还怎么使其有按下其中按钮后循环相应的事件,按住热键后暂停,再按下热键就继续循环,当按下其他按钮后终止其循环并运行所按下按钮触发的事件? 求助大侠们帮忙。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-5-16 07:20:10 | 显示全部楼层
哥们,我建议你还是先把基本的东西好好看看吧,加上你的另一个标题,似乎写了给你,你也不清楚是怎么回事
发表于 2010-5-16 07:55:21 | 显示全部楼层
发表于 2010-5-16 11:58:17 | 显示全部楼层
GUI生成模式 改成 EVENT的.
 楼主| 发表于 2010-5-16 12:57:32 | 显示全部楼层
谢啦。这类的教材太分散啦。我得好好收集下。学习下。有好教材的谢谢提供
发表于 2010-5-16 20:08:16 | 显示全部楼层
事件模式应该可以很好的实现吧
发表于 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事件
至于热键暂停,论坛例子够多的了,自行搜索

评分

参与人数 1金钱 +10 收起 理由
chnlikang + 10

查看全部评分

 楼主| 发表于 2010-5-17 16:50:11 | 显示全部楼层
感谢楼上,学习啦
 楼主| 发表于 2010-5-17 17:08:24 | 显示全部楼层
 楼主| 发表于 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)’窗口的关闭按钮无效,无法关闭。以上问题求正解.
发表于 2010-5-18 11:56:47 | 显示全部楼层
这问题好像是AU3的单线程无法多线程造成的
把SLEEP(1000)改造,可能能够解决问题
 楼主| 发表于 2010-5-19 10:30:44 | 显示全部楼层
有人回答下呗。等啦好几天啦。没个满意答案
发表于 2010-5-20 00:31:11 | 显示全部楼层
还是把根打扎实些好
 楼主| 发表于 2010-5-20 07:43:43 | 显示全部楼层
回复 13# yusky
请回答出来,然后再说这些没劲的话,别人云亦云,这不是什么好做风。
 楼主| 发表于 2010-5-20 08:28:09 | 显示全部楼层
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-18 17:54 , Processed in 0.148849 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表