按下另一个键时按下该键(AHK)

时间:2019-03-16 02:24:18

标签: key autohotkey auto

我正在处理此脚本。

#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

2 个答案:

答案 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},而不是它应该触发的总数。无论如何,根据您所说的话,这似乎是不太可能的情况。