Возможно вы просто искали способ эмуляции нажатия клавиши в приложении, и хотели найти SendMessage(WM_KEYDOWN)+SendMessage(WM_KEYUP) или SendInput(), но если вы уже столкнулись с тем, что этот способ вам не подходит, как, например, в играх, которые специально защищаются от подобных методов для усложнения жизни ботописателям, добро пожаловать под кат.
Хотя программный подход более уместен для решения данной задачи, но с учётом доступности Arduino like плат, и аппаратное решение выглядит жизнеспособным, т.к. требует всего несколько простых шагов:
Выбор аппаратной платформы
Даже Arduino uno имеет на борту USB совместимый служебный микроконтроллер, но наиболее доступная плата с нативной поддержкой USB основны микроконтроллером это Arduino Leonardo(или её клон):
Необходимое ПО
- Arduino IDE. Версия 1.6.9 в моём случае.
- Библиотека HID Project. Версия 2.4.3 в моём случае.
Скетч
Полноценный двунаправленный обмен данными с HID устройством организовывается нетривиально, но передать устройству битовый флаг можно через состояние индикатора Num Lock. Скет, который отправляет нажатие фиксированной клавиши, пока включен Num Lock(ещё и отображая её состояние) получился довольно простым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <Arduino.h> #include "HID-Project.h" const int pinLed = LED_BUILTIN; void setup() { pinMode(pinLed, OUTPUT); BootKeyboard.begin(); } void loop() { if (BootKeyboard.getLeds() & LED_NUM_LOCK) { digitalWrite(pinLed, HIGH); BootKeyboard.print('N'); delay(250); } else { digitalWrite(pinLed, LOW); } } |
Результат

Послесловие
Arduino IDE хоть и простая среда разработки, но очень ограниченная, что сильно расстраивает пользователей более функциональных IDE вроде CLion. И услышав мольбы этих пользователей были созданы проекты CLion Arduino Plugin и Arduino Cmake.
Исходники проекта созданного с помощью данных инструментов можно найти на гитхабе.