Зробіть клавішу поводом як перемикач або звичайну клавішу, залежно від того, як довго її натискали, використовуючи AutoHotKey


0

Наразі я використовую 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

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

Оновлення "henkan" для 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натискання та відпускання клавіші
  • тривалість між прес-релізом ( DOWN/ UP) була меншою за задане значення (напр .: 500 мс)

Чи є простий спосіб змінити мою конфігурацію AutoHotKey, щоб продовжувати використовувати SC07B як ключ перемикача ( Fn), а також відобразити його на Enter з попередніми умовами?

Те, що я визначаю комбінації клавіш, здається, змушує відображення Enterпрацювати над випуском ключа, що я хочу, але це також означає, що я не можу використовувати KeyWait і перевіряти час очікування, оскільки я вважаю, що команди запускатимуться лише після випуску ключа ( що тоді не має сенсу).

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


Хоча я не публікую відповідь, оскільки не можу з’ясувати вашу першу умову, ви можете використовувати комбінацію A_TickCountта Keywaitвизначити, як довго натискали клавішу.
Елліот ДеНольф

Я збираюся редагувати та переформулювати своє запитання. Це так просто, як: я хочу перевстановити клавішу, щоб вона була одночасно корисною як "Enter" при натисканні та випуску менше ніж 500 мс, і корисною як перемикач для створення інших відображень (наприклад, клавіші зі стрілками WASD), щоб імітувати те саме поведінка як клавіша Fn деяких клавіатур
killy971

Я бачу, що ви намагаєтеся отримати доступ до "звичайних" клавіш F1 ... F12. У багатьох системах BIOS встановлений таким чином, що вам потрібна клавіша Fn, щоб отримати "звичайні" клавіші F1 ... F12. Якщо це ваша основна проблема, я пропоную вивчити ваше налаштування BIOS і переключити поведінку клавіш Fn "назад" на нормальне. Таким чином, вам не потрібно займатися, імітуючи поведінку клавіш Fn в ах.
Роберт Ілбрінк

Відповіді:


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тощо. Повідомте мене, чи працює ця відповідь для вас.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.