waynew 发表于 2010-2-25 23:36:52

[已解决]如果用一个热键开始/停止相同的函数。

本帖最后由 waynew 于 2010-3-6 17:56 编辑

#Include <HotKey.au3>

Global Const $VK_ESCAPE = 0x1B
Global Const $VK_F12 = 0x7B
Global $testFlg

_HotKeyAssign($VK_F12, 'test', $HK_FLAG_DEFAULT)

; Assign "CTRL-ESC" with Quit()
_HotKeyAssign(BitOR($CK_CONTROL, $VK_ESCAPE), 'Quit')

While 1
    Sleep(10)
WEnd

Func Quit()
    Exit
EndFunc   ;==>Quit


Func test()
    $testFlg = Not $testFlg
    If Not $testFlg Then Beep()
    Local $io = 0
    While $testFlg
      Sleep(1000)
      $io += 1
      ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $io = ' & $io & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    WEnd
EndFunc

hotkey.au3这个udf非常不错,可以给不同的程序指定相同的热键,但它有个问题就是没法中断循环。

上面这个例子,我希望按下ctrl-f12调用函数test,再次按下中断test,但是没法实现,毛病出在 哪里,谁能帮一下?

不要使用HotKeySet()函数,这个函数的毛病是热键是全局的,没法给单独的窗口或者软件指定热键。

gapkiller 发表于 2010-2-26 10:36:51

F12 开始
F11 停止
Ctrl+Esc 退出
#Include <HotKey.au3>

Global Const $VK_ESCAPE = 0x1B
Global Const $VK_F12 = 0x7B
Global Const $VK_F11 = 0x7A
Global $testFlg

_HotKeyAssign($VK_F12, 'test', $HK_FLAG_DEFAULT)
_HotKeyAssign($VK_F11, 'test2', $HK_FLAG_DEFAULT)


; Assign "CTRL-ESC" with Quit()
_HotKeyAssign(BitOR($CK_CONTROL, $VK_ESCAPE), 'Quit')

While 1
    Sleep(10)
WEnd

Func Quit()
    Exit
EndFunc   ;==>Quit


Func test()
        GUICreate("",100,100,-1,-1,0x80000000)
        GUICtrlCreateLabel("",0,0,100,100,0x0201)
        GUICtrlSetFont(-1,30)
        GUISetState()
        Local $io=0
        $testFlg = True
    While $testFlg
      Sleep(100)
      $io += 1
                GUICtrlSetData(-1,$io)
        WEnd
        GUIDelete()
EndFunc

Func test2()
        $testFlg=False
EndFunc

sanmoking 发表于 2010-2-26 11:34:14

我用的HotKeySet()德一个键又当暂停又当开始,你可以改下,原理一样。。。
一个键既当暂停又当开始,如下。
HotKeySet("`","hoho");快捷键【~】,数字1左边那个键
$ok = 0 ;脚本打开时不点击鼠标
While 1 ;死循环
      Sleep(10);每次点击的间隔,毫秒
      If $ok = 1 Then
                MouseClick("left");点击左键
                ;MouseClick("left");点击右键
      EndIf      
WEnd
Func hoho();开关
$ok = Abs($ok - 1);按一下0,再按一下1,再按一下0…………
EndFunc

netegg 发表于 2010-2-26 15:02:35

While 1 ;死循环
      Sleep(10);每次点击的间隔,毫秒
      switch $ok
         case1
                MouseClick("left");点击左键
                $ok=0
         case 0
                MouseClick("left");点击右键
               $ok=1
   endswitch   
WEnd

waynew 发表于 2010-2-27 07:38:59

非常感谢各位,楼上的几个例子很有启发,谢谢大家。

rikthhpgf2005 发表于 2010-2-27 08:46:20

$var = not $var

zpmc123 发表于 2017-1-2 13:49:40

这个源码会用到要好好学一下!
页: [1]
查看完整版本: [已解决]如果用一个热键开始/停止相同的函数。