2016-09-28 113 views
2

我想讓CTRL + Shift + X在AutoIT中關閉一個函數,函數會關閉,但在結束時CTRL和SHIFT鍵會卡住。我嘗試過插入{CTRL向上}和{向上移動},但它沒有效果。AutoIT - 組合鍵執行後卡住了嗎?

這是怎麼回事?

這裏是整個AutoIt的測試腳本我的工作 -


$dll = DllOpen("C:\Windows\System32\user32.dll") 

Global Const $keys[8] = [0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x5b, 0x5c] 
;0xa0 LSHIFT 
;0xa1 RSHIFT 
;0xa2 LCTRL 
;0xa3 RCTRL 
;0xa4 LALT 
;0xa5 RALT 
;0x5b LWIN 
;0x5c RWIN 


HotKeySet("{PAUSE}", "stop") 
Hotkeyset("^X", test) 

opt("SendKeyDelay", 0) 
opt("SendKeyDownDelay", 0) 

While True 


Sleep(500) 
WEnd 

Func test() 
    Send("The control and shift keys are going to be stuck down at the end of this.") 
    Send("{ENTER}") 
    Send("{ENTER}") 
    Send("PlaceHolder,") 
    Send("{ENTER}") 
    Send("PlaceHolder") 
    Send("{TAB}") 
    Send("{HOME}") 
    Send("{LCTRL up}") 
    Send("{RCTRL up}") 
    Send("{LSHIFT up}") 
    Send("{RSHIFT up}") 

    Call("UnstickKeys") 

EndFunc 


Func UnstickKeys() 
    For $vkvalue in $keys 
     DllCall($dll,"int","keybd_event","int",$vkvalue,"int",0,"long",2,"long",0) ;Release each key 
    Next 
EndFunc 


Func stop() 
    Exit 
EndFunc ;==>stop the script 
+0

不知道AutoIt的,但據我所知它就像VBA \ VB6,這意味着 雖然真 睡眠(200) 蜿蜒 是你潛在的問題。無盡的循環從來都不是好事。特別是那些持有線程的。 – Stavm

+0

@Stavm受控制的無限循環是偉大的事情......如何保持我的腳本活着? 我一直使用AutoIT的無限循環來保持腳本運行,否則它會運行一次。當我點擊暫停/暫停鍵時,這個無限循環停止。 –

回答

1

下面我修改了測試功能。此解決方案有一個問題,因爲要再次運行該功能,您將需要放開​​shift並按住Ctrl鍵並將其壓制。您可以從您的代碼中刪除該dll調用。在調用函數時,我也禁用了^ X熱鍵。這樣更安全。

Func test() 
    Hotkeyset("^X") 
    Send("The control and shift keys are going to be stuck down at the end of this.") 
    Send("{ENTER}") 
    Send("{ENTER}") 
    Send("PlaceHolder,") 
    Send("{ENTER}") 
    Send("PlaceHolder") 
    Send("{TAB}") 
    Send("{HOME}") 

    send("{CTRLDOWN}") 
    send("{CTRLUP}") 
    send("{SHIFTDOWN}") 
    send("{SHIFTUP}") 
    Hotkeyset("^X", "test") 
EndFunc