toweroff 0 21 июля, 2016 Опубликовано 21 июля, 2016 · Жалоба Добрый день Ситуация следующая: купили китайский сканер QR кодов. Эти самые коды с русскими символами (сделаны в BarTender) Китайское чудо работает отлично, распознавание уверенное, но русские символы не понимает. Китаец прислал программку, которая (при переводе сканера в режим COM-порта) садится на этот порт и помещает перекодированные символы в буфер клавиатуры. Но и тут засада - Win CP 1251 там нет и китаец на запрос о поддержке нашей кодировки вообще перестал отвечать на письма Придется как-то самим... На порт я сяду, а вот работать с клавиатурным буфером не умею. Расскажите, пожалуйста, как это все работает, как определяется фокус ввода (или это клавиатуры никак не касается и приложение само фокус захватывает?) В общем, буду признателен за ликбез в этой области Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 21 июля, 2016 Опубликовано 21 июля, 2016 · Жалоба Давно было, исползовал SendMessage(hwnd, WM_CHAR, ' ', 1L); Для клавиатурных сообщений посмотрите из списка WM_XXXX т.е. на окно hwnd отправлялось сообщение типа WM_CHAR с данными "пробел". В Вашем случае (возможно) сделать программу-фильтр в виде "сервиса", которая будет сидеть на компорте, преобразовывать в "точтонадо" и отсылать сообщения на основную программу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 21 июля, 2016 Опубликовано 21 июля, 2016 · Жалоба В Вашем случае (возможно) сделать программу-фильтр в виде "сервиса", которая будет сидеть на компорте, преобразовывать в "точтонадо" и отсылать сообщения на основную программу. приложение должно быть любым - у кого сейчас фокус ввода, тот и принял эти символы. Нет фокуса - так и фиг с ними. Короче говоря - полный аналог клавиатуры нужен :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SlavaV 0 21 июля, 2016 Опубликовано 21 июля, 2016 · Жалоба Я другого не понял, при чем сканер и кодировка. Сканер считывает закодированную последовательность числовых данных и передает её на интерфейс, а ваше дело её уже интерпретировать. Опыт автоматизации большой, но сканеры ни когда не подключал в разрыв клавиатуры (хотя все сканеры поддерживали такой тип подключения). PS я к тому, что в разрыв клавиатуры сканер должен посылать скан коды символов, попробуйте подключить непосредственно к COM порту и посмотреть, что он посылает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 21 июля, 2016 Опубликовано 21 июля, 2016 (изменено) · Жалоба приложение должно быть любым - у кого сейчас фокус ввода, тот и принял эти символы. Нет фокуса - так и фиг с ними. Короче говоря - полный аналог клавиатуры нужен :) Если задача "разовая", в стиле "сделать надежно и забыть". Я делал халтурку. В платформенных весах вышел из строя весовой контроллер, который работал в примитивном протоколе по RS232. Контроллер весов был подключен на COM PC, далее инф шла в 1С (через свой "драйвер", который понимал протокл сгорелого вес-контроллера). Купили новый контроллер, кажется Rinstrrum, со своим протоколом. Решение. В PC была воткнута 2-портовая плата RS232 NMOS. 2 потрта этой платы были включены "в разрыв" соединения нового вес-контроллера и PC. (получился такой себе "типа шлюз"). Программная поддержка сводилась к конвертации протокола нового вес-контроллера к протоколу "сгорелого", который понимала 1C. ps - А аппаратный интерфейс у китайского девайса какой - RS232 или USB ? Изменено 21 июля, 2016 пользователем k155la3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 21 июля, 2016 Опубликовано 21 июля, 2016 · Жалоба Я другого не понял, при чем сканер и кодировка. Сканер считывает закодированную последовательность числовых данных и передает её на интерфейс, а ваше дело её уже интерпретировать. Опыт автоматизации большой, но сканеры ни когда не подключал в разрыв клавиатуры (хотя все сканеры поддерживали такой тип подключения). PS я к тому, что в разрыв клавиатуры сканер должен посылать скан коды символов, попробуйте подключить непосредственно к COM порту и посмотреть, что он посылает. сканер работает в одном из двух режимов - Keyboard HID или USB-COM в режиме клавиатуры вместо русских символов - полная хрень, поэтому нужно в режиме порта ловить то, что от него приходит, перекодировать в Win CP1251 и эмулировать клавиатурные нажатия ps - А аппаратный интерфейс у китайского девайса какой - RS232 или USB ? USB работает в одном из двух режимов - выше указал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SlavaV 0 21 июля, 2016 Опубликовано 21 июля, 2016 · Жалоба Драйвера в режиме клавиатуры китайские или стандартные? В режиме COM подключитесь терминалом (putty и т.д.) посмотрите, что он шлет реальные данные или перекодированные. Если сами программу разрабатываете поймайте отладчиком строку перед выводом в "поле вывода" и опять-же сравнить с реально закодированными данными. PS думаю, что "поле ввода" конвертирует в какой-нибудь unicode (я просто на VC++ разрабатываю так там черт ногу сломит с этими вариантами типов данных поддержки Unicode) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 21 июля, 2016 Опубликовано 21 июля, 2016 · Жалоба Драйвера в режиме клавиатуры китайские или стандартные? В режиме COM подключитесь терминалом (putty и т.д.) посмотрите, что он шлет реальные данные или перекодированные. Если сами программу разрабатываете поймайте отладчиком строку перед выводом в "поле вывода" и опять-же сравнить с реально закодированными данными. PS думаю, что "поле ввода" конвертирует в какой-нибудь unicode (я просто на VC++ разрабатываю так там черт ногу сломит с этими вариантами типов данных поддержки Unicode) драйвер клавиатуры стандартный в режиме COM-порта шлёт сырец, знаки препинания, англ.буквы, цифры - одним байтом, как есть русские символы передаются двухбайтовой посылкой, начинаются с 0x84 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SlavaV 0 21 июля, 2016 Опубликовано 21 июля, 2016 · Жалоба думаю тогда нужно менять программу формирования QR кодов. моё мнение должно быть всё или однобайтовое (ASCII) или всё двухбайтовое (Unicode) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 21 июля, 2016 Опубликовано 21 июля, 2016 (изменено) · Жалоба Я не понял, что имеется ввиду под "фокус ввода". Это: 1 - в разрезе системы в целом ( любое открытое приложение, например Word или Notepad, при получении фокуса получает китай-QR вывод), или 2 - в разрезе Вашего приложения, Вашей разработки (несколько форм-диалогов, и ввод в них), или 3 - одно приложение не Вашей разработки (те без доступа к исх. коду) Ps - около года назад юзал функции из этой оперы, вот раздел Win32API, возможно Вам поможет. MSDN_Keyboard MapVirtualKey() - Translates (maps) a virtual-key code into a scan code or character value, or translates a scan code into a virtual-key code. To specify a handle to the keyboard layout to use for translating the specified code, use the MapVirtualKeyEx function. MapVirtualKeyEx() - Maps a virtual-key code into a scan code or character value, or translates a scan code into a virtual-key code. The function translates the codes using the input language and an input locale identifier. SendInput() - Synthesizes keystrokes, mouse motions, and button clicks. Изменено 21 июля, 2016 пользователем k155la3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 21 июля, 2016 Опубликовано 21 июля, 2016 · Жалоба Я не понял, что имеется ввиду под "фокус ввода". Это: 1 - в разрезе системы в целом ( любое открытое приложение, например Word или Notepad, при получении фокуса получает китай-QR вывод), оно самое раздел Win32API, возможно Вам поможет. спасибо, буду изучать думаю тогда нужно менять программу формирования QR кодов BarTender - это данность. В любом случае, смартфон читает нормально то, что им напечатано Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 22 июля, 2016 Опубликовано 22 июля, 2016 · Жалоба приложение должно быть любым - у кого сейчас фокус ввода, тот и принял эти символы. Нет фокуса - так и фиг с ними. Короче говоря - полный аналог клавиатуры нужен :) Если "приложение должно быть любым", то никакие SendMessage, WM_CHAR, WM_KEYDOWN и т.п. не подойдут. Так как у разных приложений разный способ приёма событий клавиатуры. С одними приложениями будет работать, с другими - нет. Подойдёт BlockInput/SendInput - они работают с системным буфером событий мыши/клавы. Курите MSDN на этот счёт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 26 июля, 2016 Опубликовано 26 июля, 2016 · Жалоба Если "приложение должно быть любым", то никакие SendMessage, WM_CHAR, WM_KEYDOWN и т.п. не подойдут. Так как у разных приложений разный способ приёма событий клавиатуры. С одними приложениями будет работать, с другими - нет. Подойдёт BlockInput/SendInput - они работают с системным буфером событий мыши/клавы. Курите MSDN на этот счёт. спасибо, работает НО! (куда ж без него? :) ) Переключать Верхний-нижний регистры я могу, а вот раскладку клавиатуры - нет Если пользоваться LoadKeyboardLayout, то раскладка переключается для приложения, которое и выполняет эту функцию, а не для того, у которого фокус в данный момент и, я так понимаю, напрямую влезть в буфер клавиатуры никак, только через генерацию системных событий нажатия/отпускания клавиши :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 26 июля, 2016 Опубликовано 26 июля, 2016 · Жалоба Переключать Верхний-нижний регистры я могу, а вот раскладку клавиатуры - нет Если пользоваться LoadKeyboardLayout, то раскладка переключается для приложения, которое и выполняет эту функцию, а не для того, у которого фокус в данный момент и, я так понимаю, напрямую влезть в буфер клавиатуры никак, только через генерацию системных событий нажатия/отпускания клавиши :( Так и генерите соответствующую комбинацию нажатий переключения раскладки через этот же SendInput. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 26 июля, 2016 Опубликовано 26 июля, 2016 · Жалоба Кмк с генерацией именно русских символов лучший вариант комбинация ALT+<код символа>. Например ALT+134 эквивалентно "Ж". https://ru.wikipedia.org/wiki/Alt-%D0%BA%D0%BE%D0%B4 Проблема в том что на линукс/макос способ ввода/коды другие, но судя по контексту билдера это не важно. ЗЫ А вообще смотрю на SendInput - там же вроде описана возможность напрямую слать юникод. Разве не работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться