Аппаратный эмулятор нажатий клавиш для Windows

Возможно вы просто искали способ эмуляции нажатия клавиши в приложении, и хотели найти SendMessage(WM_KEYDOWN)+SendMessage(WM_KEYUP) или SendInput(), но если вы уже столкнулись с тем, что этот способ вам не подходит, как, например, в играх, которые специально защищаются от подобных методов для усложнения жизни ботописателям, добро пожаловать под кат.

Хотя программный подход более уместен для решения данной задачи, но с учётом доступности Arduino like плат, и аппаратное решение выглядит жизнеспособным, т.к. требует всего несколько простых шагов:

Выбор аппаратной платформы

Даже Arduino uno имеет на борту USB совместимый служебный микроконтроллер, но наиболее доступная плата с нативной поддержкой USB основны микроконтроллером это Arduino Leonardo(или её клон):
iskra-neo.2

Необходимое ПО

  • Arduino IDE. Версия 1.6.9 в моём случае.
  • Библиотека HID Project. Версия 2.4.3 в моём случае.

Скетч

Полноценный двунаправленный обмен данными с HID устройством организовывается нетривиально, но передать устройству битовый флаг можно через состояние индикатора Num Lock. Скет, который отправляет нажатие фиксированной клавиши, пока включен Num Lock(ещё и отображая её состояние) получился довольно простым:

Результат

animation

Послесловие

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

Yuriy Nazarov on GithubYuriy Nazarov on Twitter
Yuriy Nazarov
Software engineer
Люблю machine learning