我有一个使用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命令之间添加延迟?
答案 0 :(得分:1)
每次点击后,会发送文字和鼠标点击,延迟时间为100毫秒
user_input := "hello world"
SetMouseDelay 100, Play
SendPlay {Click 61,50}%user_input%{enter}{click 67,408}
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