如何在AutoHotkey中的SendInput命令之间添加延迟?
问题描述:
我有一个使用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命令之间添加延迟而不重复使用睡眠?
答
这将发送文本和鼠标点击一个延时100ms每个以下点击
user_input := "hello world"
SetMouseDelay 100, Play
SendPlay {Click 61,50}%user_input%{enter}{click 67,408}
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
我的理解是,SendInput不会尝试协调的键盘和鼠标事件或延误,因此它可以利用快速的操作系统调用没有这种支持。 –