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

Пользоваться так:
После запуска появляется окно с параметрами настройки порта — номер порта, стоп-биты и прочее. Так же можно указать, что бы программа запускалась при входе пользователя. (флажок «Автозагрузка»)При нажатии кнопки «ОК» настройки сохраняются в реестре у текущего пользователя, открывается 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. Добавил исходники
- +1
- 01 октября 2012, 11:44
- KalyakaMalyaka
- 2
Файлы в топике:
COMtoKBD.zip, COMToKBDSource.zip
Какова глубокая цель сего чуда? Просто даже не представляю для чего такое может потребоваться. Разве что IT-шная «ложка в клавиатуре».
Табуляция обрабатывается? или клавиши типа Alt существуют?
Табуляция обрабатывается? или клавиши типа Alt существуют?
Да вот попался нам такой заказчик. Это оказалось самым дешевым и быстрым решением. Может кому еще сгодится.
Насчет табуляции и alt не задумывался, но не думаю что так уж трудно прикрутить при желании.
Насчет табуляции и alt не задумывался, но не думаю что так уж трудно прикрутить при желании.
- KalyakaMalyaka
- 01 октября 2012, 15:49
- ↑
- ↓
А я давно делал себе на работу УСБ клаву на одной АтМега8. И на ней было аж 17 кнопок :) Работало как ХИД и ненадо было ничего выдумывать… Умело шифт, альт и контрол в любых комбинациях ну и серию нажатий… Если интересно ТУТ ВСЁ ЧТО НАДО
к сожалению никаких промежуточных устройств между аппаратурой и компом не допускалось, так что не подошло. При том что на стороне аппаратуры стояла обычная FT223
- KalyakaMalyaka
- 01 октября 2012, 16:20
- ↑
- ↓
Так а что за задача комерческая тайна?
Управлять приложением по ком-порту — так лучше же сообщения приложению слать, чем клаву эмулировать (поди кто ткнёт чего мышкой или на клаве и собьёт фокус). Вести лог — так те же сообщения и буффер обмена (та же причина).
Хотя да, задача эмуляции клавиатуры актуальна для работы с фоновым окном. Сам наталкивался на такое дело.
Управлять приложением по ком-порту — так лучше же сообщения приложению слать, чем клаву эмулировать (поди кто ткнёт чего мышкой или на клаве и собьёт фокус). Вести лог — так те же сообщения и буффер обмена (та же причина).
Хотя да, задача эмуляции клавиатуры актуальна для работы с фоновым окном. Сам наталкивался на такое дело.
Похожим способом работали старые БАРКОД Ридеры :) Они отдавали код или через эмуляцию PS/2 (в комплекте был кабель сквозной..) или через серийный кабель — и точно так вот работало — посылало на КОМ порт АСКИ данные…
хе-хе уже есть еще заказчик, как раз на эти старинные штуки, ридеров у них много, а портов ps/2 мало :) но, тссс! никому ни слова!
- KalyakaMalyaka
- 01 октября 2012, 18:28
- ↑
- ↓
да шо там делать? берем проц с железным USB (не-не, софтовый на авр не рассматриваем в принципе! хотя тоже реализуемо.), ps/2 раскурен давно и чуть более чем полностью. хид-клавиатурный (а также мышиный и просто) профиль обычно в примерах от производителя присутствует.
скрестить — ПРОФИТ!!!
на самом деле работы чуть более чем на вечер. ну два максимум.
скрестить — ПРОФИТ!!!
на самом деле работы чуть более чем на вечер. ну два максимум.
да есть такие, только второй заказчик как раз на них и попал — глюкавые они. С них наше общение и началось :)
- KalyakaMalyaka
- 02 октября 2012, 07:13
- ↑
- ↓
Добрый день, понадобилась как раз ваша программа. Из arduino посылаю на com порт определенные символы и нужно что-бы происходило нажатие клавишы на компьютере в активном окне. Вопрос, какую кодировку используете? как например сделать нажатие стрелочки влево?
- feniks123456
- 25 марта 2017, 18:36
- ↑
- ↓
эх давно это было. Кодировка всегда ENGLISH, переопределяется в процедуре «comportScanerReceiveData» в main.pas
Для стрелочек можно попробовать послать скан код AT клавиатуры. Если не получится, то надо будет смотреть в сторону работы функции ProcessKey в файле SendKey.pas
Для стрелочек можно попробовать послать скан код AT клавиатуры. Если не получится, то надо будет смотреть в сторону работы функции ProcessKey в файле SendKey.pas
- KalyakaMalyaka
- 26 марта 2017, 11:01
- ↑
- ↓
Вопрос: а если открытое активное окно- виндовский плеер. Будет ли он управляться передаваемыми символами?
Попробуйте, мне счас к сожалению не на чем проверять, но принципиальных ограничений нет.
- KalyakaMalyaka
- 02 октября 2012, 07:10
- ↑
- ↓
Комментарии (26)
RSS свернуть / развернуть