Эмулятор нажатия клавиш в Win на Com-порту

Недавно понадобилось преобразовывать символы, из COM порта в нажатия клавиш на клавиатуре в Windows. Причем желательно с эмуляцией нажатия Shift для преобразования клавиш в спецсимволы, например вместо 2 надо эмулировать нажатие символа @. Поискал по сети — нужного не обнаружил, либо платное, либо без Shift. Пришлось ваять самому.

Пользоваться так:

После запуска появляется окно с параметрами настройки порта — номер порта, стоп-биты и прочее. Так же можно указать, что бы программа запускалась при входе пользователя. (флажок «Автозагрузка»)
При нажатии кнопки «ОК» настройки сохраняются в реестре у текущего пользователя, открывается COM-порт и программа сворачивается в tray. Кнопка «Свернуть» сворачивает программу в tray, кнопки сворачивания и закрытия в заголовке окна то же только сворачивают программу в tray. Для прекращения работы программы надо нажать кнопку «Усё». Если программа при запуске обнаруживает свои настройки в реестре, то немножко повисев на экране сама сворачивается в tray. Вытянуть ее оттуда можно щелкнув на ее иконке любой клавишей мыши.

Пока программа сидит в tray все поступающие из COM-порта байты передаются в текущее активное окно windows в английской раскладке. Кроме того, байт 12H интерпретируется как нажатие и удержание клавиши Shift. Все символы, полученные после байта 12H, будут передаваться с эмуляцией удержания клавиши Shift. Что бы отменить удержание Shift надо передать два байта F0H и 12H (взяты из скан кодов AT-клавиатуры)
Еще можно подавить передачу байт 0AH и 0DH, подняв флажок «Подавлять Enter».
Вот собственно и все. Писано на Delphi, если кому нужны исходники, пишите в комменты — добавлю.
P.S. Чуть не забыл — в полях настройки порта есть значения Custom — так они не рабочие, лучше ими не пользоваться.
P.P.S. Добавил исходники
Файлы в топике: COMtoKBD.zip, COMToKBDSource.zip

Комментарии (26)

RSS свернуть / развернуть
Какова глубокая цель сего чуда? Просто даже не представляю для чего такое может потребоваться. Разве что IT-шная «ложка в клавиатуре».
Табуляция обрабатывается? или клавиши типа Alt существуют?
0
дак каляка-маляка жеж
0
Что-то у меня в глазах двоится начало :)
0
Да вот попался нам такой заказчик. Это оказалось самым дешевым и быстрым решением. Может кому еще сгодится.
Насчет табуляции и alt не задумывался, но не думаю что так уж трудно прикрутить при желании.
+2
А я давно делал себе на работу УСБ клаву на одной АтМега8. И на ней было аж 17 кнопок :) Работало как ХИД и ненадо было ничего выдумывать… Умело шифт, альт и контрол в любых комбинациях ну и серию нажатий… Если интересно ТУТ ВСЁ ЧТО НАДО
0
к сожалению никаких промежуточных устройств между аппаратурой и компом не допускалось, так что не подошло. При том что на стороне аппаратуры стояла обычная FT223
0
Так а что за задача комерческая тайна?
Управлять приложением по ком-порту — так лучше же сообщения приложению слать, чем клаву эмулировать (поди кто ткнёт чего мышкой или на клаве и собьёт фокус). Вести лог — так те же сообщения и буффер обмена (та же причина).
Хотя да, задача эмуляции клавиатуры актуальна для работы с фоновым окном. Сам наталкивался на такое дело.
0
Похожим способом работали старые БАРКОД Ридеры :) Они отдавали код или через эмуляцию PS/2 (в комплекте был кабель сквозной..) или через серийный кабель — и точно так вот работало — посылало на КОМ порт АСКИ данные…
0
хе-хе уже есть еще заказчик, как раз на эти старинные штуки, ридеров у них много, а портов ps/2 мало :) но, тссс! никому ни слова!
0
сделаешь ps/2 -> USB конвертор, отпосться. а то мне клаву к ноуту надо подключить :)
0
да шо там делать? берем проц с железным USB (не-не, софтовый на авр не рассматриваем в принципе! хотя тоже реализуемо.), ps/2 раскурен давно и чуть более чем полностью. хид-клавиатурный (а также мышиный и просто) профиль обычно в примерах от производителя присутствует.
скрестить — ПРОФИТ!!!
на самом деле работы чуть более чем на вечер. ну два максимум.
0
Только на «собраться и сделать» уходит год, ну два максимум (потом тупо забиваешь).
0
по необходимости. когда прижмет — время магическим образом находится.
0
а если время не находится — значит не настолько оно тебе и нужно на самом деле.
0
Купить дешевле. Китайский USB-PS/2 стоит как МК с USB (даже дешевле — от 2 баксов). И нету повода для прокрастинации.
0
да есть такие, только второй заказчик как раз на них и попал — глюкавые они. С них наше общение и началось :)
0
Ну одно дело когда девайс хардварно реализует клаву, другое когда шлют данные, из которых потом софтварно эмулируют клаву…
0
Так небыло сначала понятно зачем такой геморой нужен вообще :)
0
это что, с местного форума клиент? а то что-то такое в «надо разработать» смутно припоминается…
0
Добрый день, понадобилась как раз ваша программа. Из arduino посылаю на com порт определенные символы и нужно что-бы происходило нажатие клавишы на компьютере в активном окне. Вопрос, какую кодировку используете? как например сделать нажатие стрелочки влево?
0
Есть же сырки, посмотри там. Скорее всего надо послать код VK_LEFT.
0
увы, но нет, там сложнее
0
эх давно это было. Кодировка всегда ENGLISH, переопределяется в процедуре «comportScanerReceiveData» в main.pas
Для стрелочек можно попробовать послать скан код AT клавиатуры. Если не получится, то надо будет смотреть в сторону работы функции ProcessKey в файле SendKey.pas
0
Вопрос: а если открытое активное окно- виндовский плеер. Будет ли он управляться передаваемыми символами?
0
  • avatar
  • STT
  • 02 октября 2012, 03:37
Попробуйте, мне счас к сожалению не на чем проверять, но принципиальных ограничений нет.
0
Если не трудно, добавьте исходники пожалуйста.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.