dearmb 发表于 2014-4-6 17:24:58

hostkeys好使,按钮不好使,请问我哪错了?

在未执行“开始”之前,按钮停止是好使的
当执行开始之后,按钮停止没有反应
按热键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


shqf 发表于 2014-4-6 18:06:38

本帖最后由 shqf 于 2014-4-6 18:13 编辑

GUIGetMsg()靠不停循环来获取GUI消息,再作进一步处理。可start()后程序死在这个函数内30-33句的死循环内了,程序再也无法执行到16句、22句,你叫程序怎能获取到$Button2的消息并执行Terminate()呢!

dearmb 发表于 2014-4-6 18:08:53

回复 2# shqf


    可是我里头就是一个死循环,while能好使不?

dearmb 发表于 2014-4-6 18:50:17

我现在是想要这样,我是要操控一个windows phone的虚拟机,激活虚拟器窗口的时候,会把windows的一些功能键禁用掉,一些键留给虚拟机使用,所以这个时候au3设置的hotkeys是失效的,所以我想把按钮做的大一点,然后可以鼠标挪动到按钮结束程序,但是现在结束不了,我只能鼠标点到程序窗口上,然后再按F4结束程序

xms77 发表于 2014-4-6 21:41:12

不知道楼主到底想干什么?如果说是运行虚拟机和停止虚拟机,为什么一定要设置热键来结束呢?

shqf 发表于 2014-4-6 22:03:51

回复 3# dearmb


    去掉start()函数中的DO死循环。

user3000 发表于 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 = [["^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缺点是: 欲终止循环时,无论是按热键还是点击停止按钮,一般都要连按(点击)两次才会有响应!

dearmb 发表于 2014-4-7 10:01:19

回复 5# xms77


    是用脚本操纵虚拟机,我是要运行脚本和停止脚本,不是运行虚拟机和停止虚拟机……

xms77 发表于 2014-4-7 21:54:08

回复 8# dearmb
Au3脚本默认不是有运行和暂停的托盘菜单吗?

dearmb 发表于 2014-4-7 22:28:14

回复 9# xms77


    右下角那个?
鼠标被控制来回乱点,怎么点托盘菜单?

wangms 发表于 2014-4-8 12:55:20

顶一下赚钱。。。。。。。。。。。。。。。
页: [1]
查看完整版本: hostkeys好使,按钮不好使,请问我哪错了?