Нажатие клавиши при нажатии другой клавиши (AHK) - PullRequest
1 голос
/ 16 марта 2019

Я работаю над этим сценарием.

#Persistent
Random , timerval , 7800 , 8460
SetTimer, PressTheKey,  %timerval%
Return

PressTheKey:
Send, {d}
Return

Это базовый интервал для нажатия «d» каждые 8 ​​~ секунд.Оно работает.Проблема в том, что если нажата другая клавиша, например, правая кнопка мыши, «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 ]

1 голос
/ 17 марта 2019

GetKeyState не будет работать в вашем примере AHK, причина в том, что он не вызывает циклы.

(первое возвращение предотвратит это)

вы можете исправить это с помощью этого примера:

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 

note - если выЕсли щелкнуть правой кнопкой мыши, курсор исчезнет во всплывающем меню. Вы можете только исправить это с помощью строки кода send {esc} или написать строку кода, чтобы переместить курсор назад в это окно!

0 голосов
/ 18 марта 2019

У вас это почти получилось.

#Persistent
Random , timerval , 7800 , 8460
SetTimer, PressTheKey,  %timerval%
Return

PressTheKey:
KeyWait, RButton, U
Send, {d}
Return

Единственная проблема, которую я вижу, это то, что RButton удерживается дольше, чем в 2 раза больше таймера.В этом случае, я полагаю, это вызовет только один дополнительный Send, {d} в отличие от общей суммы, которая должна.Во всяком случае, это кажется маловероятной ситуацией, основанной на том, что вы сказали.

...