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

如何在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命令之间添加延迟而不重复使用睡眠?

尝试使用SendPlay代替SendInput

这将发送文本和鼠标点击一个延时100ms每个以下点击

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

documentation for SendPlay

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 
+0

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