2017-09-20 254 views
2

我有一個使用SendInput的AutoHotkey腳本,它發送MouseClick命令太快,我的程序無法處理。我的腳本將發送一個MouseClick來對輸入字段進行聚焦,然後在字段完成聚焦之前開始鍵入。如何在AutoHotkey中的SendInput命令之間添加延遲?

我使用SetKeyDelay,使我的劇本跑慢一點嘗試,但這並不與SendInput工作。

注意:SendInput不服從SetKeyDelay;在該模式下擊鍵之間沒有延遲。發送模式輸入生效時,發送同樣如此。
Documentation for SetKeyDelay

我目前的解決辦法是每個輸入後使用睡眠命令,但這是不夠理想。

SendMode Input 
F1:: 
    MouseClick, left, 61, 50   ; select title field 
    sleep 100      ; artificial delay to prevent misfocused inputs 

    SendInput %user_input%{Enter} ; enter job title 
    sleep 100      ; artificial delay 

    MouseClick, left, 67, 408  ; select job 
    sleep 100      ; artificial delay 
Return 

理想我想爲添加每個SendInput命令之間的延遲,而無需手動使用睡眠命令每次更好的解決方案。

如何在AutoHotkey中的SendInput命令之間添加延遲而不重複使用睡眠?

回答

1

嘗試使用SendPlay代替SendInput

這將發送文本和鼠標點擊一個延時100ms每個以下點擊

user_input := "hello world" 
SetMouseDelay 100, Play 
SendPlay {Click 61,50}%user_input%{enter}{click 67,408} 

documentation for SendPlay

SendPlay

注意:SendPlay可能沒有效果,如果啓用UAC可言,即使腳本以管理員身份運行。有關更多信息,請參閱FAQ

SendInput一樣,SendPlay的擊鍵不會穿插用戶鍵入的擊鍵。因此,如果用戶在SendPlay期間碰巧輸入了某些內容,則這些擊鍵將被推遲,直到之後。

雖然SendPlay比SendInput慢很多,但它通常比傳統的SendEvent模式更快(即使KeyDelay爲-1)。

SendPlay不使用SetKeyDelay和SetMouseDelay的標準設置。相反,它默認爲無延遲可言,可在下面的示例如圖所示進行更改:

SetKeyDelay, 0, 10, Play ; Note that both 0 and -1 are the same in SendPlay mode. 
SetMouseDelay, 10, Play 
+0

我的理解是,SendInput不會嘗試協調的鍵盤和鼠標事件或延誤,因此它可以利用快速的操作系統調用沒有這種支持。 –