找回密码
 加入
搜索
查看: 4687|回复: 10

[AU3基础] hostkeys好使,按钮不好使,请问我哪错了?

  [复制链接]
发表于 2014-4-6 17:24:58 | 显示全部楼层 |阅读模式
在未执行“开始”之前,按钮停止是好使的
当执行开始之后,按钮停止没有反应
按热键F4可以结束。不知道为什么
#AutoIt3Wrapper_UseX64=n
#include <array.au3>
#Include <File.au3>
#include <GUIConstantsEx.au3>

HotKeySet("{f4}", "Terminate")

$Form2 = GUICreate("MarinaClick", 260, 430, 270, 150)
$Button1 = GUICtrlCreateButton("开始", 20,20, 225, 190)
$Button2 = GUICtrlCreateButton("停止", 20,220, 225, 190)

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                                Case $Button1
                                        start()
                                Case $Button2
                                        Terminate()
        EndSwitch
WEnd


Func start()
$flagaaaa=1
Do
        MsgBox(0,0,0)
        Until $flagaaaa=0
EndFunc

Func Terminate()

        Exit
EndFunc
发表于 2014-4-6 18:06:38 | 显示全部楼层
本帖最后由 shqf 于 2014-4-6 18:13 编辑

GUIGetMsg()靠不停循环来获取GUI消息,再作进一步处理。可start()后程序死在这个函数内30-33句的死循环内了,程序再也无法执行到16句、22句,你叫程序怎能获取到$Button2的消息并执行Terminate()呢!
 楼主| 发表于 2014-4-6 18:08:53 | 显示全部楼层
回复 2# shqf


    可是我里头就是一个死循环,while能好使不?
 楼主| 发表于 2014-4-6 18:50:17 | 显示全部楼层
我现在是想要这样,我是要操控一个windows phone的虚拟机,激活虚拟器窗口的时候,会把windows的一些功能键禁用掉,一些键留给虚拟机使用,所以这个时候au3设置的hotkeys是失效的,所以我想把按钮做的大一点,然后可以鼠标挪动到按钮结束程序,但是现在结束不了,我只能鼠标点到程序窗口上,然后再按F4结束程序
发表于 2014-4-6 21:41:12 | 显示全部楼层
不知道楼主到底想干什么?如果说是运行虚拟机和停止虚拟机,为什么一定要设置热键来结束呢?
发表于 2014-4-6 22:03:51 | 显示全部楼层
回复 3# dearmb


    去掉start()函数中的DO死循环。
发表于 2014-4-6 23:05:25 | 显示全部楼层
回复 1# dearmb
#include <GUIConstantsEx.au3>
Local $iCount = 0

$Form2 = GUICreate("MarinaClick", 260, 430, 270, 150)
$Button1 = GUICtrlCreateButton("开始", 20, 20, 225, 190)
$Button2 = GUICtrlCreateButton("停止", 20, 220, 225, 190)
Local $aAccelKeys[2][2] = [["^b", $Button1],["^s", $Button2]]
GUISetAccelerators($aAccelKeys)
GUISetState(@SW_SHOW)

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        $iCount = 0
                        While 1
                                $iCount += 1
                                ;ConsoleWrite('当前循环次数: ' & $iCount & @CRLF)
                                If GUIGetMsg() = $Button2 Then ExitLoop
                        WEnd

                Case $Button2
                        ExitLoop
        EndSwitch
WEnd
Terminate()

Func Terminate()
        If $iCount Then MsgBox(0, '', '已经进行了' & $iCount & '次循环')
        Exit
EndFunc   ;==>Terminate
缺点是: 欲终止循环时,无论是按热键还是点击停止按钮,一般都要连按(点击)两次才会有响应!
 楼主| 发表于 2014-4-7 10:01:19 | 显示全部楼层
回复 5# xms77


    是用脚本操纵虚拟机,我是要运行脚本和停止脚本,不是运行虚拟机和停止虚拟机……
发表于 2014-4-7 21:54:08 | 显示全部楼层
回复 8# dearmb
Au3脚本默认不是有运行和暂停的托盘菜单吗?
 楼主| 发表于 2014-4-7 22:28:14 | 显示全部楼层
回复 9# xms77


    右下角那个?
鼠标被控制来回乱点,怎么点托盘菜单?
发表于 2014-4-8 12:55:20 | 显示全部楼层
顶一下赚钱。。。。。。。。。。。。。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-17 00:30 , Processed in 0.100322 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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