реклама на сайте
подробности

 
 
> Положить в буфер клавиатуры, C builder
toweroff
сообщение Jul 21 2016, 06:49
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Добрый день
Ситуация следующая: купили китайский сканер QR кодов. Эти самые коды с русскими символами (сделаны в BarTender)
Китайское чудо работает отлично, распознавание уверенное, но русские символы не понимает. Китаец прислал программку, которая (при переводе сканера в режим COM-порта) садится на этот порт и помещает перекодированные символы в буфер клавиатуры. Но и тут засада - Win CP 1251 там нет и китаец на запрос о поддержке нашей кодировки вообще перестал отвечать на письма
Придется как-то самим... На порт я сяду, а вот работать с клавиатурным буфером не умею. Расскажите, пожалуйста, как это все работает, как определяется фокус ввода (или это клавиатуры никак не касается и приложение само фокус захватывает?)
В общем, буду признателен за ликбез в этой области
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
k155la3
сообщение Jul 21 2016, 08:43
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Давно было, исползовал
Код
  SendMessage(hwnd, WM_CHAR, ' ', 1L);

Для клавиатурных сообщений посмотрите из списка WM_XXXX
т.е. на окно hwnd отправлялось сообщение типа WM_CHAR с данными "пробел".
В Вашем случае (возможно) сделать программу-фильтр в виде "сервиса", которая будет сидеть на компорте,
преобразовывать в "точтонадо" и отсылать сообщения на основную программу.

Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 21 2016, 08:50
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(k155la3 @ Jul 21 2016, 11:43) *
В Вашем случае (возможно) сделать программу-фильтр в виде "сервиса", которая будет сидеть на компорте,
преобразовывать в "точтонадо" и отсылать сообщения на основную программу.

приложение должно быть любым - у кого сейчас фокус ввода, тот и принял эти символы. Нет фокуса - так и фиг с ними. Короче говоря - полный аналог клавиатуры нужен sm.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 22 2016, 03:00
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(toweroff @ Jul 21 2016, 14:50) *
приложение должно быть любым - у кого сейчас фокус ввода, тот и принял эти символы. Нет фокуса - так и фиг с ними. Короче говоря - полный аналог клавиатуры нужен sm.gif

Если "приложение должно быть любым", то никакие SendMessage, WM_CHAR, WM_KEYDOWN и т.п. не подойдут. Так как у разных приложений разный способ приёма событий клавиатуры. С одними приложениями будет работать, с другими - нет.
Подойдёт BlockInput/SendInput - они работают с системным буфером событий мыши/клавы. Курите MSDN на этот счёт.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 26 2016, 08:22
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(jcxz @ Jul 22 2016, 06:00) *
Если "приложение должно быть любым", то никакие SendMessage, WM_CHAR, WM_KEYDOWN и т.п. не подойдут. Так как у разных приложений разный способ приёма событий клавиатуры. С одними приложениями будет работать, с другими - нет.
Подойдёт BlockInput/SendInput - они работают с системным буфером событий мыши/клавы. Курите MSDN на этот счёт.

спасибо, работает
НО! (куда ж без него? sm.gif )
Переключать Верхний-нижний регистры я могу, а вот раскладку клавиатуры - нет
Если пользоваться LoadKeyboardLayout, то раскладка переключается для приложения, которое и выполняет эту функцию, а не для того, у которого фокус в данный момент
и, я так понимаю, напрямую влезть в буфер клавиатуры никак, только через генерацию системных событий нажатия/отпускания клавиши sad.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 26 2016, 12:18
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(toweroff @ Jul 26 2016, 14:22) *
Переключать Верхний-нижний регистры я могу, а вот раскладку клавиатуры - нет
Если пользоваться LoadKeyboardLayout, то раскладка переключается для приложения, которое и выполняет эту функцию, а не для того, у которого фокус в данный момент
и, я так понимаю, напрямую влезть в буфер клавиатуры никак, только через генерацию системных событий нажатия/отпускания клавиши sad.gif

Так и генерите соответствующую комбинацию нажатий переключения раскладки через этот же SendInput.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- toweroff   Положить в буфер клавиатуры   Jul 21 2016, 06:49
|- - k155la3   Цитата(toweroff @ Jul 21 2016, 11:50) при...   Jul 21 2016, 09:21
- - SlavaV   Я другого не понял, при чем сканер и кодировка. С...   Jul 21 2016, 09:01
|- - toweroff   Цитата(SlavaV @ Jul 21 2016, 12:01) Я дру...   Jul 21 2016, 11:03
- - SlavaV   Драйвера в режиме клавиатуры китайские или стандар...   Jul 21 2016, 12:35
|- - toweroff   Цитата(SlavaV @ Jul 21 2016, 15:35) Драйв...   Jul 21 2016, 13:33
- - SlavaV   думаю тогда нужно менять программу формирования QR...   Jul 21 2016, 13:38
- - k155la3   Я не понял, что имеется ввиду под "фокус ввод...   Jul 21 2016, 13:54
|- - toweroff   Цитата(k155la3 @ Jul 21 2016, 16:54) Я не...   Jul 21 2016, 15:36
- - Kabdim   Кмк с генерацией именно русских символов лучший ва...   Jul 26 2016, 12:32
- - toweroff   Цитата(Kabdim @ Jul 26 2016, 15:32) Разве...   Jul 26 2016, 13:33


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 12:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01449 секунд с 7
ELECTRONIX ©2004-2016