В настоящее время я использую AutoHotKey для имитации раскладки клавиш Happy Hacking Keyboard Pro 2 на Topre Realforce 89s.

Скрипт, который я создал, доступен на github.

Я использовал японский ключ "muhenkan" (SC07B) для имитации клавиши Fn и добавил все сопоставления комбинаций клавиш Fn, как в двух примерах ниже:

SC07B & SC002::send,{Blind}{F1} ; Fn + 1 -> F1
SC07B & SC01A::send,{Blind}{Up} ; Fn + [ -> Up

Находясь слева и справа от клавиши пробела, я также хочу использовать "muhenkan" и "henkan" (SC079) в качестве Enter и Backspace.

Преобразование "хенкан" в Backspace легко сделать с помощью:

SC079::send,{BS}
+SC079::send,{BS}
^SC079::send,^{BS}

Что касается "muhenkan", который используется в качестве клавиши переключения Fn , я сопоставил его с клавишей Enter следующей строкой:

SC07B::send,{Enter}

Кажется, нет никакого конфликта с использованием его как Fn и Enter:

  • в сочетании с другим ключом не выводит Enter
  • когда никакая другая клавиша не комбинируется, она выдает Enter после отпускания

Бывают случаи, когда я могу сначала нажать эту клавишу Fn с намерением объединить ее с другой клавишей и в конце концов отказаться от этого намерения, отпустив клавишу Fn .

Проблема в том, что, отпуская ключ, он выдает Enter, что не идеально.

Я хотел бы улучшить это, настроив этот ключ Fn так, чтобы при отпускании он выводил только Enter, если выполняются два следующих условия:

  • никакая другая клавиша не была нажата между продолжительностью нажатия и отпускания клавиши Fn
  • продолжительность между нажатием / выпуском (ВНИЗ / ВВЕРХ) была меньше заданного значения (например: 500 мс)

Есть ли простой способ изменить мою конфигурацию AutoHotKey, чтобы продолжить использование SC07B в качестве клавиши переключения (Fn), а также сопоставить ее с Enter для более ранних условий?

Тот факт, что я определяю комбинации клавиш, по-видимому, заставляет сопоставление « Ввод» работать при отпускании ключа, чего я и хочу, но это также означает, что я не могу использовать KeyWait и проверять время ожидания, так как считаю, что команды будут запускаться только после отпускания ключа (что не имеет смысла тогда).

A_TimeSincePriorHotkey также не может использоваться, поскольку он не отражает время, проведенное между нажатием и отпусканием текущей горячей клавиши.

1 ответ1

0

Вот как вы можете использовать A_TickCount и KeyWait для определения продолжительности нажатия клавиши:

LCtrl:: ;hotkey has 3 different functions based on press duration
    keyDown := A_TickCount
    Keywait LCtrl
    If ((A_TickCount-keyDown) < 300)
        Send {Enter}
    If ((A_TickCount-keyDown) > 300) and ((A_TickCount-keyDown) < 600)
        Send {Left}
    If ((A_TickCount-keyDown) > 600)
        Send {Right}
Return

Однако это НЕ позволяет вам использовать ключ в комбинации (то есть. Ctrl+a).

Чтобы выполнить эту задачу, вы должны использовать While GetKeyState() ниже:

RCtrl::
    keyDown := A_TickCount
    While GetKeyState("RCtrl", "P")
        Send {Ctrl Down}
    duration := A_TickCount - keyDown
    Send {Ctrl Up}
    if duration < 300
        Send {Enter}
    Return

Это позволит вам по-прежнему выполнять комбинации клавиш, такие как Ctrl+a и т.д. Дайте мне знать, если этот ответ работает для вас.

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