Send,SendInput,SendEvent函数多次输入单个键

时间:2014-03-06 07:34:08

标签: autohotkey

我在AutoHotKey中创建了一个脚本。我必须输入要在中打开的整个文件路径 文件browser.i使用了send函数,但它多次传递相同的密钥。我尝试使用函数SetKeyDelay但仍然多次输入密钥。我尝试了其他替代方法,如sendInput和SendEvent,但它仍然无法正常工作。 即使我在两者之间终止脚本,如果控件切换到某个输入框或编辑器,它也会开始将值输入该区域。即使在脚本执行终止后,发送功能也会继续输入密钥。

脚本:

;Open Adobe Acrobat 8. 
run Acrobat.exe sleep, 1000 

WinWait, Adobe Acrobat Professional, 
Sleep, 1000 

;Open Compare Documents Window 
send, {ALT}A 

Sleep, 1000 

send, U 

WinWait, Compare Documents, 

;Enter File Path 
IfWinNotActive, Compare Documents, 
WinActivate, Compare Documents, 
WinWaitActive, Compare Documents, 
Sleep, 1000 

send, !H 

WinWaitActive, Open,,1000 
sleep, 1000 

SendEvent, "D:\Sample\a.pdf"

它输入类似这样的文字

CCCC ::::: \\ DDDDiiiiii

1 个答案:

答案 0 :(得分:0)

要尝试的事情:

将AutoHotkey更新为最新版本。

请勿使用SendEvent。它允许其他输入在输入时中断文本。请改用SendInput。建议将以下内容放在所有脚本的顶部:

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

SendMode Input更改Send以使用SendInput代替SendEvent。它缓冲输入并立即发送它,而不是让其他键盘/脚本中断文本。有关详细信息,请参阅:Send

重新启动计算机并确保没有其他AutoHotkey程序在运行,或者没有运行多个Autohotkey脚本实例。这在测试时尤其是一个问题,因为您可能已多次启动相同的脚本,并且如果线程未正确终止,则可能有多个实例在那里等待激活打开窗口。一旦激活了Open窗口,那么你可能有4个以上的休眠脚本都试图同时输入,这将为你提供你正在描述的输出。