題 使用AutoHotKey凍結用戶輸入


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

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

當我在程序中輸入一堆文本時,就是這樣 ControlSend,用戶的打字不會干擾。

可能?怎麼樣?


5
2017-09-10 13:52


起源


我想我應該問,你是用一個SendInput發送你的所有文本,還是想要凍結(打開用戶輸入緩衝區),在其中使用SendInputs進行多次計算或循環,然後解凍(轉儲用戶輸入緩衝區) )? - Bavi_H
如果它可以凍結,做一堆東西,然後解凍,這將是理想的。 - Ram Rachum


答案:


如果您能夠使用一個SendInput發送所有文本,則AutoHotkey會為您解決問題。從AutoHotkey 發送 文檔,

SendInput和SendPlay [...]緩衝發送過程中的任何物理鍵盤或鼠標活動,這可以防止用戶的擊鍵穿插在發送的內容中。

如果在凍結時丟失用戶輸入是可以接受的(而不是緩衝它並在之後發送),你可以使用 了BlockInput。就像是

BlockInput On
; Send desired text here
BlockInput Off

但是,BlockInput文檔說如果它在鍵已經關閉時啟動,它可以阻止“鍵入”事件並導致鍵被卡住。因此,根據您何時使用它,您可能必須先等待密鑰才能使用 KeyWait


1
2017-09-17 14:49



但我正在使用 ControlSend因為我發送給一個特定的控件...... - Ram Rachum
好。考慮更新您的問題,以便其他響應者了解全貌。 - Bavi_H
編輯回答:BlockInput可能會有所幫助。 - Bavi_H
不, BlockInput 對我沒有幫助。 - Ram Rachum


使用輸入命令。

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

編輯

你說:

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

換句話說:我凍結,然後用戶鍵入“xyz”,但事實並非如此   傳遞到活動程序,然後我解凍,按鍵“xyz”   被傳遞給程序,然後一切都恢復正常   用戶可以再次鍵入,它將轉到活動程序。

Input命令執行:

;等待用戶按任意鍵。產生不可見的鍵   字符,例如修改鍵,功能鍵和箭頭鍵,   被列為結束鍵   這樣他們也會被發現。

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}

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


-2
2017-09-12 09:08



我根本不明白這會有什麼幫助。 - Ram Rachum
讓我引用這些文件。 - surfasb
似乎這是為了從用戶那裡獲取輸入。我不想接受用戶的輸入。事實上,如果用戶不提供任何輸入,那也沒關係。但是,如果他這樣做,我想緩衝它並在我完成使用後發送自己的輸入後輸出它 SendInput。我不知道如何使用它 Input。 - Ram Rachum