Автоматическое связывание клавиш (CapsLock+D+J) для (Удалить)

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

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

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

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

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

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

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

2 ответа

Решение

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

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

Уловка, чтобы поймать любое событие 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.:/

Другие вопросы по тегам