在我的 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}
您可以对多个键进行循环,或者它将一串键作为参数。