Я знаю, что в AutoHotkey вы можете использовать "KeyWait" для ожидания нажатия или отпускания клавиши, но что я могу сделать, если я хочу дождаться, когда будет отпущена любая из двух клавиш?

Я нашел это в Интернете, но это когда вы хотите дождаться нажатия любой из двух клавиш.

LButton & XButton1::
Keywait, r
Keywait, LAlt
SendInput {ShiftDown}
SendInput {v Down}
SendInput {v Up}
SendInput {Shift Up}

Input, UserInput,v,{LButton}{XButton1}
;v is if you want input to be visible
if ErrorLevel=EndKey:LButton
{
    theFunctionIrunAlltheTime()
    Return
}
else if ErrorLevel=EndKey:XButton1
{
    theFunctionIrunAlltheTime()
    Return
}

Независимо от того, какая из этих кнопок является выпуском, я хочу сделать то же самое, я думаю, что приведенный выше пример работает только с буквами, а не с кнопками, но здесь важно то, что к моменту запуска сценария LButton n XButton1 уже нажаты и я хочу, чтобы в середине подпрограммы определить, когда какой-либо из них выпущен, любая идея, пожалуйста ??? спасибо, спасибо.

4 ответа4

1

Попробуйте добавить KeyWait к приведенному выше коду:

F4::
Input, UserInput,v,{enter}{tab} ;v is if you want input to be visible
if ErrorLevel=EndKey:Tab 
{
    KeyWait, Tab, L
    Msgbox Tab key was pressed
}
else
if ErrorLevel=EndKey:Enter 
 {
    KeyWait, Enter, L
    Msgbox Enter key was pressed
}
; ExitApp
return
1

Вы также можете определить 2 клавиши как контекстно-зависимые горячие клавиши:

; define a variable in a hotkey:
F4:: key_pressed := true

#If (key_pressed)   ; If the value of the variable "key_pressed" is 1 (true)

    $b up:: 
    key_pressed := false
    Msgbox b key was pressed
    return

    $v up::
    key_pressed := false
    Msgbox v key was pressed
    return

#If

https://autohotkey.com/docs/commands/_If.htm

1
While GetKeyState("LButton") && GetKeyState("XButton1")
    Sleep 10

; msg to user assumes only one or the other was released...
MsgBox % (GetKeyState("LButton") ? "XButton1" : "LButton") " Released"
0

Попробуйте также это:

~LButton & XButton1::
SetTimer detect_key_released, 50
; do sth
return

    detect_key_released:
If !GetKeyState("LButton", "P")
{
    SetTimer detect_key_released, off
    MsgBox LButton released
    return
}
If !GetKeyState("XButton1", "P")
{
    SetTimer detect_key_released, off
    MsgBox XButton1 released
    return
}
return

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .