Я пытаюсь перегрузить клавиатуру.

CapsLock & J::Send {Left} .. является левой стрелкой, вы можете угадать другие направления.

CapsLock & H::Send ^ {Left} ... это слово перехода влево.

Я начал добавлять много лишних, и у меня кончились ключи, поэтому я подумал, что хотел бы ввести дополнительные модификаторы, например D, например de Delete Delete. CapsLock+D+J удалит символ слева (например, клавиша Backspace), CapsLock+D+L удалит символ справа (как ключ удаления).

Кроме того, S будет моим модификатором Speedy, таким как Ctrl, что означает "прыгать слова". Так что CapsLock+S+D+J удалит слово слева.

Если бы я мог только ... -привязать к 3+ ключам, что бы решить это. -привязать к любому keyup/down и обработать его в блоках if-else, что бы это решило.

Идеи приветствуются.

2 ответа2

1

Уловка, чтобы поймать любое событие keyup/down, состоит в следующем:

*d::msgbox, d down
*d up::msgbox, d up

Обратите внимание, что "d down" срабатывает много раз, пока вы не отпустите его. * обозначает любые клавиши-модификаторы, такие как shift/alt/ctrl/win (или ничего).

Чтобы справиться со всем, я использую sg. как это:

updateState(key, dir) {..}

*a::updateState("a", "down")
*a up::updateState("a", "up")
*b::updateState("b", "down")
*b up::updateState("b", "up")
*c::updateState("c", "down")
...

и я храню все необходимые мне состояния ключей в переменных, таких как key_a , key_b , key_capslock , ..

Кроме того, текущее событие находится в такой переменной, как a_down , a_up , b_down , b_up , ..

Тогда я могу использовать операторы if-else, такие как

if(key_capslock and key_d and key_f and j_down) {
    ; do whatever
}

Нет, я не могу распознать снижение скорости при наборе текста.

Если CapsLock не нажата, я использую следующее, чтобы "пройти" нормальную функциональность клавиатуры:

; DEFAULT keyboard
if(key_capslock = 0) {
    if(key_shift)
        shift := "+"
    if(key_ctrl)
        ctrl := "^"
    if(key_alt)
        alt := "!"

    if(dir="down") {
        event = {%key% down}
    }
    else {
        event = {%key% up}
    }

    SendInput, %shift%%ctrl%%alt%%event%
}

Изменить: Обратите внимание, что некоторые ключи не могут быть обнаружены одновременно, как (большинство?) Клавиатуры имеют матричную раскладку с горизонтальными и вертикальными проводами. После нажатия клавиши используется 1 горизонтальный и 1 вертикальный провод, поэтому следующее нажатие / отпускание клавиши, разделяющее любой из этих проводов, не может быть точно обнаружено. По этой причине я не могу использовать S и JKL одновременно, поэтому я использую F для FAAST вместо S для SPEEDY. : /

1

Три модификатора, такие как CapsLock & H & D не могут быть использованы.

Вы можете использовать GetKeyState и комбинировать его с горячими клавишами и оператором if или switch для создания любой комбинации.

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