如何在AutoHotkey中的SendInput命令之间添加延迟?

如何在AutoHotkey中的SendInput命令之间添加延迟?,autohotkey,sendinput,Autohotkey,Sendinput,我有一个自动热键脚本,使用它发送命令太快,我的程序无法处理。我的脚本将发送鼠标单击以聚焦输入字段,然后在字段完成聚焦之前开始键入 我尝试使用使我的脚本运行得稍微慢一点,但这不适用于SendInput 注意:SendInput不遵守SetKeyDelay;在该模式下,击键之间没有延迟。当SendMode输入生效时,发送也是如此。 我目前的解决方法是在每次输入后使用sleep命令,但这并不理想 SendMode Input F1:: MouseClick, left, 61, 50

我有一个自动热键脚本,使用它发送命令太快,我的程序无法处理。我的脚本将发送鼠标单击以聚焦输入字段,然后在字段完成聚焦之前开始键入

我尝试使用使我的脚本运行得稍微慢一点,但这不适用于
SendInput

注意:SendInput不遵守SetKeyDelay;在该模式下,击键之间没有延迟。当SendMode输入生效时,发送也是如此。

我目前的解决方法是在每次输入后使用sleep命令,但这并不理想

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命令之间添加延迟,而无需每次手动使用sleep命令

如何在不重复使用睡眠的情况下在自动热键中的SendInput命令之间添加延迟?

尝试使用而不是

这会在每次单击后发送文本和鼠标单击,延迟100毫秒

user_input := "hello world"
SetMouseDelay 100, Play
SendPlay {Click 61,50}%user_input%{enter}{click 67,408}

注意:如果启用UAC,即使脚本以管理员身份运行,SendPlay也可能完全无效。有关更多信息,请参阅

与此类似,SendPlay的击键不会与用户键入的击键混杂在一起。因此,如果用户在SendPlay期间碰巧键入了一些内容,那么这些按键将推迟到以后

尽管SendPlay比SendInput慢很多,但它通常比传统模式快(即使在is-1时)

SendPlay不使用SetKeyDelay和SetMouseDelay的标准设置。相反,它默认为完全没有延迟,可以更改,如以下示例所示:

SetKeyDelay, 0, 10, Play  ; Note that both 0 and -1 are the same in SendPlay mode.
SetMouseDelay, 10, Play

我的理解是,SendInput不尝试协调键盘和鼠标事件或延迟,因此它可以利用没有这种支持的快速操作系统调用。