使用 AutoHotKey 凍結用戶輸入

使用 AutoHotKey 凍結用戶輸入

在我的 AutoHotKey 腳本中,我想凍結用戶輸入,即來自用戶的任何輸入都不會傳播到活動程序,然後解凍並使用戶鍵入的所有輸入都轉到該程序。

換句話說:我凍結了,然後用戶輸入“xyz”,但這是不是傳遞到活動程序,然後我解凍,按鍵“xyz”被傳遞到程序,然後一切恢復正常,用戶可以再次鍵入,它將轉到活動程序。

這樣,當我使用 在程式中輸入一堆文字時ControlSend,使用者的輸入不會受到干擾。

可能的?如何?

答案1

如果您能夠使用一個 SendInput 發送所有文本,那麼 AutoHotkey 就會為您解決這個問題。從自動熱鍵傳送文件,

SendInput 和 SendPlay [...] 緩衝發送期間的任何實體鍵盤或滑鼠活動,這可以防止使用者的擊鍵與正在發送的擊鍵交叉。

如果在凍結時丟失使用者輸入(而不是緩衝它並隨後發送)是可以接受的,您可以使用區塊輸入。就像是

BlockInput On
; Send desired text here
BlockInput Off

然而,BlockInput 文件表示,如果它在按鍵已經按下時啟動,它可能會阻止「按鍵向上」事件並導致按鍵看起來被按下。因此,根據您使用它的時間,您可能必須先等待使用釋放金鑰按鍵等待

答案2

使用輸入命令。

http://autohotkey.free.fr/docs/commands/Input.htm

編輯

你說:

在我的 AutoHotKey 腳本中,我想凍結用戶輸入,即來自用戶的任何輸入都不會傳播到活動程序,然後解凍並使用戶鍵入的所有輸入都轉到該程序。

換句話說:我凍結,然後用戶鍵入“xyz”,但這不會傳遞給活動程序,然後我解凍,按鍵“xyz”傳遞給程序,然後一切恢復正常,用戶可以鍵入再次,它將轉到活動程序。

輸入命令的作用是:

;等待使用者按任意鍵。不產生可見字元的鍵(例如修飾鍵、功能鍵和箭頭鍵)被列為結束鍵,以便它們也會被偵測到。

Input, SingleKey, L1, {LControl}{RControl}{LAlt}{RAlt}{LShift}{RShift}{LWin}{RWin}{F1}{F2}{F3}{F4}{F5}{F6}{F7}{F8}{F9}{F10}{F11}{F12}{Left}{Right}{Up}{Down}{Home}{End}{PgUp}{PgDn}{Del}{Ins}{BS}{Capslock}{Numlock}{PrintScreen}{Pause}

您可以針對多個鍵循環此操作,也可以將一串鍵作為參數。

相關內容