我正在处理此脚本。
#Persistent
Random , timerval , 7800 , 8460
SetTimer, PressTheKey, %timerval%
Return
PressTheKey:
Send, {d}
Return
这是每8〜秒按一次“ d”的基本间隔。有用。问题是,如果按下另一个键(如鼠标右键),则不会触发“ d”,而我不得不等待剩余的时间。
我需要让脚本等待按下鼠标右键,或者每10毫秒左右运行一次检查,以检查是否按下了鼠标右键,如果没有按下,则可以发送, {d}。
因此,我正在考虑使用GetKeyState(),KeyWait或While循环来克服这些问题。
#Persistent
Random , timerval , 7800 , 8460
SetTimer, PressTheKey, %timerval%
Return
GetKeyState, state, RButton
if state = D
KeyWait, RButton
PressTheKey:
Send, {d}
Return
我尝试了一个和另一个,但是我无法将其投入工作,不是编码专家,而是尝试学习。
有人可以帮我吗?
编辑:按住键一段时间,可以解决此问题。
#Persistent
Random , timerval , 7800 , 8460
Random , timerval2 , 180 , 250
SetTimer, PressTheKey, %timerval%
Return
PressTheKey:
Send, {t down}
Sleep, %timerval2%
Send, {t up}
Return
F1::
Pause
Suspend
return
答案 0 :(得分:1)
GetKeyState在您的AHK示例中不起作用,原因是,它不在循环中。
(第一个Return会阻止该问题)
您可以通过以下示例解决此问题:
Example.ahk
;#notrayicon
#SingleInstance force
#Persistent
#MaxThreadsPerHotkey 10
Random , timerval , 7800 , 8460
SetTimer, PressTheKey, %timerval%
Return
PressTheKey:
GetKeyState, state, RButton
if state = U
{
KeyWait, RButton
send {esc}
;ControlSend, , {esc}, ahk_exe NOTEPAD.EXE ;you can use this codeline for specific Application.
}
Send, {d}
;ControlSend, , {d}, ahk_exe NOTEPAD.EXE ;you can use this codeline for specific Application.
Return
f1::exitapp
注意-如果您单击鼠标右键,则光标将消失在弹出菜单中,您可以仅使用代码行send {esc}
修复此问题或编写代码行以进行聚焦光标回到该窗口!
答案 1 :(得分:0)
您差一点就拥有了。
#Persistent
Random , timerval , 7800 , 8460
SetTimer, PressTheKey, %timerval%
Return
PressTheKey:
KeyWait, RButton, U
Send, {d}
Return
我唯一看到的问题是RButton
的按下时间是否超过计时器的2倍。在那种情况下,我认为它只会触发一个额外的Send, {d}
,而不是它应该触发的总数。无论如何,根据您所说的话,这似乎是不太可能的情况。