Как временно обнулить клавишу, когда в AutoHotKey нажата другая клавиша?

1

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

Бруно Б
источник

Ответы:

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

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

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

MCL
источник