Я играю в ритм-игру, в которой вы можете связать две клавиши, чтобы нажать одну ноту (в моем случае LShift и LControl), однако она будет регистрировать ноту только в случае ударов по ней. Под этим я подразумеваю, что если я нажал LShift, он будет удерживать эту ноту, но если я нажму LControl, пока нажата LShift, он не будет регистрировать нажатие второй ноты, вместо этого он будет продолжать удерживать нажатой первую ноту. То, что я прошу, - это скрипт AutoHotKey, который отменяет нажатие клавиши при нажатии другой клавиши, т.е. если удерживать нажатой LShift, нажатие LControl приведет к аннулированию LShift и нажатию LControl.

1 ответ1

0

Попробуйте что-то вроде этого:

LShift::
    if(GetKeyState("LControl")) {
        Send, {LControl up}
    }
    Send, {LShift down}
return

LShift up::
    if(GetKeyState("LShift")) {
        Send, {LShift up}
    }
return

LControl::
    if(GetKeyState("LShift")) {
        Send, {LShift up}
    }
    Send, {LControl down}
return

LControl up::
    if(GetKeyState("LControl")) {
        Send, {LControl up}
    }
return

Я не знаю , если вы обязательно нужны горячие клавиши, но я думаю , что это сделает ваш скрипт более последовательным. Если вам вообще не нужно удерживать клавиши в нажатом положении, вы также можете просто переназначить соответствующий ключ для однократной отправки (что приведет к квази одновременному событию down/up).

PS:
Поведение вашей игры - ошибка или особенность? Другими словами: может ли быть так, что он сознательно не принимает новые ключи, пока другой удерживается? Если это так, вы в основном пытаетесь обмануть;)

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