2017-02-17 35 views
0

我有一個腳本,它使用了幾個mousemoves,當需要時,我按F3停止移動,強制重新加載或ESC停止退出應用程序的動作。它在正常的速度沒有問題的情況下工作正常。不可阻擋的腳本問題

問題是:當我減少mousespeed並增加mousedelay時,腳本變得無法阻擋:我多次按下F2,F3和ESC鍵(嘗試停止),但腳本忽略它並繼續運行mousemoves。

這裏是我的問題的一個小例子:

SendMode Input 

$F1:: 
SetDefaultMouseSpeed, 50 
SetMouseDelay, 30 

Mousemove, 200, 200 
Mousemove, 600, 600 
Mousemove, 200, 200 
Mousemove, 600, 600 
Mousemove, 200, 200 
Mousemove, 600, 600 
Mousemove, 200, 200 
Mousemove, 600, 600 
Mousemove, 200, 200 
Mousemove, 600, 600 
Mousemove, 200, 200 
Mousemove, 600, 600 
Mousemove, 200, 200 
Mousemove, 600, 600 
Mousemove, 200, 200 
Mousemove, 600, 600 
Mousemove, 200, 200 
Mousemove, 600, 600 
Mousemove, 200, 200 
Mousemove, 600, 600 
Mousemove, 200, 200 
Mousemove, 600, 600 

SoundPlay, *48 
return 

$F2:: Pause 
$F3:: Reload 
$ESC:: ExitApp 

爲什麼它發生,我怎麼能解決這個問題(我怎麼能停止腳本即使在低轉速+高延遲)? ps:F1鍵啓動mousemoves序列。

回答

2

的MouseMove具有非零速度不能由相同的AHK腳本內的另一個熱鍵因爲AutoHotkey的是單線程內部被中斷,直到其到達(它只是emulates線狀行爲),並且執行對每個小鼠微動一個blocking sleep您指定的總體距離。

解決方案:

  • 檢查熱鍵是否每個MouseMove事件後按,但它的非瞬;
  • 實施您自己的MouseMove,每次移動1px後檢查GetKeyState;
  • 使用與運行/暫停熱鍵主腳本/停止孩子:

    停車:瑣碎,使用Process Close
    運行:孩子應該隱藏托盤圖標,否則會留下過程密切
    暫停後:不平凡,但有solutions(另請參閱底層mechanics)。