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

时间:2017-09-20 15:28:48

标签: autohotkey sendinput

我有一个使用SendInput的AutoHotkey脚本,它发送MouseClick命令的速度太快,无法让我的程序处理。我的脚本将发送一个MouseClick来聚焦输入字段,然后在字段完成聚焦之前开始键入。

我尝试使用SetKeyDelay让我的脚本运行速度稍慢,但这并不适用于SendInput

  

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

我目前的解决方法是在每次输入后使用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命令。

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

1 个答案:

答案 0 :(得分:1)

尝试使用SendPlay代替SendInput

每次点击后,会发送文字和鼠标点击,延迟时间为100毫秒

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

来自documentation for SendPlay

  

SendPlay

     

注意:如果启用了UAC,即使脚本以管理员身份运行,SendPlay也可能完全没有效果。有关更多信息,请参阅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