Вопрос или проблема
На Windows, если подключить две USB-клавиатуры, они будут вести себя как одна. Насколько мне известно (я не могу попробовать в данный момент), даже синхронизируются CapsLock и NumLock.
Я ищу способ сопоставить сочетания клавиш со второй клавиатурой, например:
- если Ctrl+C это копирование на “обычной” клавиатуре, я хочу назначить это просто на C на второй клавиатуре.
- если AltGr+M дает µ на “обычной” клавиатуре, я хочу назначить это просто на M на второй клавиатуре.
- Я хочу напечатать . на второй клавиатуре и получить многоточие (…)
Программа должна
- работать на Windows 7 и Windows 10, 64 бита
- быть бесплатной
- поддерживать множество клавиатур
- не иметь проблем с интернационализацией (например, назначение китайских символов)
- уметь идентифицировать клавиатуры (т.е. запоминать, какая из них какая)
Я планирую использовать несколько дешевых клавиатур, переназначить клавиши иконками или подобным образом, и таким образом иметь возможность набирать символы иностранных языков или иметь сочетания клавиш для некоторых игр.
LuaMacros [Github] (Скачивание релиза), преемник HID Macros, почти делает то, что мне нужно, за исключением того, что он не может запомнить клавиатуры (или я не разобрался, как это сделать), а назначение сочетаний клавиш выполняется программным способом, и нужно знать, как писать скрипты на Lua. Я ищу более удобный способ назначения сочетаний клавиш.
[Обновление] Читайте комментарий @huy ниже. Это требует способности к кодированию, но эта часть статьи показывает, как определить, какая клавиатура отправила нажатие клавиши (я не уверен, будет ли это работать с одинаковыми клавиатурами; возможно, нужно будет углубиться в эту тему).
// Загрузить имя устройства в буфер
GetRawInputDeviceInfo (raw->header.hDevice, RIDI_DEVICENAME, stringBuffer, &bufferSize);
Я бы удалил этот ответ, который на самом деле является комментарием, но это также удалило бы комментарий.
Я только что заметил, что Томас задавал этот вопрос, и я знаю, что он умеет кодировать – или может дать это в качестве упражнения студенту 🙂
Кратко: Насколько мне известно, это не может быть (легко) сделано.
Каждая клавиатура/мышь/джойстик – это просто тупой HID, и Windows объединяет их ввод в одну единую очередь.
Теперь, вы можете (если вы умеете программировать) перехватить очередь событий и перехватить события клавиатуры. Если вы найдете то, что вас интересует, вы можете “потреблять” его и предотвратить его дальнейшую передачу.
Быстрый поиск в Google не показывает идентификатор устройства, привязанного к каждому событию, что позволило бы вам сделать это легко.
Однако вы можете получить раскладку клавиатуры, так что если у вас уже есть или вы готовы купить две неодинаковые клавиатуры, вы можете различать их в коде перехвата и решить свою проблему.
Что касается готового приложения для этого, мне жаль, но я не могу вам помочь.
Ответ или решение
Использование второго клавиатуры для создания горячих клавиш в Windows
В данной статье мы рассмотрим решение задачи по использованию второго USB-клавиатуры для назначения горячих клавиш в операционных системах Windows 7 и Windows 10. Вы можете подключить две клавиатуры, однако по умолчанию они функционируют как одно устройство, что делает необходимым использование специализированного программного обеспечения для выполнения заданий, таких как назначение определенных действий на уникальные клавиши на втором устройстве.
Проблема
Столкнувшись с необходимостью создания пользовательских горячих клавиш, вы хотите упростить выполнение определённых действий. Для задач, которые вы указали, таких как:
- Копирование текста с помощью клавиши
C
. - Ввод символа «µ» с использованием
AltGr
+M
. - Замена точки (.) на многоточие (…).
Решения
-
Использование программного обеспечения для переназначения клавиш: На сегодняшний день существует несколько инструментов, которые могут помочь в этом вопросе.
- SharpKeys: Эта утилита позволяет переназначать клавиши, но может не поддерживать несколько клавиатур хорошо.
- AutoHotkey: Это мощное средство для автоматизации в Windows. Вы сможете написать скрипты для назначения горячих клавиш, информации по использованию которой достаточно много в интернете. Реализация требует некоторого времени на изучение, но предлагает мощные возможности кастомизации.
-
LuaMacros: Вы упомянули о LuaMacros. Это инструмент, однако требует навыков программирования на Lua для назначения горячих клавиш, что может быть сложным для неподготовленного пользователя. Если вы готовы разбираться в коде, это может стать подходящим выбором.
-
Плагин или Открытое ПО: Другими вариантами могут быть поиск плагинов для AutoHotkey или подобных программ, а также сообществ, где разработчики делятся своим опытом или создают открытые проекты, которые могут включать такие функции.
Ограничения и выявление клавиатур
Как было упомянуто, Windows обрабатывает ввод с клавиатур как единый поток, что затрудняет определение, какие именно действия выполняются на каждой из них. Программное обеспечение interfacing с HID (Human Interface Device) должно использовать низкоуровневые API для идентификации устройств.
- Raw Input API: Использование Raw Input API будет наиболее надежным способом получения уникального идентификатора для вашего устройства, что позволяет вам писать скрипты, которые могут различать ввод с каждой клавиатуры. Однако это требует глубоких знаний в программировании.
Заключение
На основе вышеизложенного, можно сделать вывод, что кросс-платформенные решения зачастую требуют навыков программирования для правильного функционирования. Программные инструменты, такие как AutoHotkey и LuaMacros, предоставляют возможность кастомизации, но потребуют некоторой работы и изучения. Использование специализированных приложений, способных управлять вводом с нескольких устройств также может быть перспективным, но будьте готовы к экспериментам.
Это предложение поможет вам лучше управлять задачами, связанными с набором текста, облегчая ввод текстов и специальные символы, и повысит общую продуктивность.