使用 AutoHotKey 冻结用户输入

使用 AutoHotKey 冻结用户输入

在我的 AutoHotKey 脚本中,我想要冻结用户输入,即,任何来自用户的输入都不会传播到活动程序,然后解冻并让用户输入的所有输入都转到程序。

换句话说:我冻结了,然后用户输入“xyz”,但这是不是传递给活动程序,然后我解冻,击键“xyz”被传递给程序,然后一切恢复正常,用户可以再次输入并进入活动程序。

这样,当我使用 在程序中输入一堆文本时ControlSend,用户的输入就不会受到干扰。

可能吗?怎么办?

答案1

如果您能够使用一个 SendInput 发送所有文本,那么 AutoHotkey 会为您解决这个问题。从 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}

您可以对多个键进行循环,或者它将一串键作为参数。

相关内容