Лучший способ обработки ввода с клавиатуры “клином”

StackOverflow https://stackoverflow.com/questions/42437

  •  09-06-2019
  •  | 
  •  

Вопрос

Я пишу POS-систему C # (point of sale), которая принимает входные данные с клавиатуры wedge magcard reader.Это означает, что любые данные, которые он считывает с магнитной полосы, вводятся так, как если бы они были набраны на клавиатуре очень быстро.В настоящее время я справляюсь с этим, подключаясь к событию нажатия клавиши и ища серию очень быстрых нажатий клавиш, которые содержат символы-стражи, проводящие пальцем по карте.

Есть ли лучший способ справиться с такого рода вводом?

Редактировать:Устройство просто представляет данные в виде нажатий клавиш и не взаимодействует через какой-либо другой драйвер.Кроме того, мы используем широкий спектр устройств такого типа, поэтому в идеале метод должен работать независимо от конкретной модели используемого клина.Однако, если нет другого выхода, мне придется обойтись без этого.

Это было полезно?

Решение

Одна вещь, которую вы можете сделать, это то, что вы должны иметь возможность настроить свой wedge reader таким образом, чтобы он представлял один или несколько управляющих символов до или после строки.Вы бы использовали эти управляющие символы, чтобы знать, что у вас вот-вот будет (или только что был) ввод magcard.

Этот же метод используется устройствами считывания штрих-кодов, чтобы ваше приложение знало, как сфокусироваться или обработать данные, вводимые с устройства.

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

Это предполагает, что ваши устройства просто представляют данные в виде нажатий клавиш и не взаимодействуют через какой-либо другой драйвер.

Другие советы

Вы также можете использовать Raw Input API, если вам заранее известны аппаратные идентификаторы устройств. Недавно я писал об этом в блоге. Это может показаться безумием, но это удовлетворило мои требования:основная цель в моем случае состояла в том, чтобы иметь возможность получать входные данные, даже если приложение потеряло фокус из-за того, что кто-то случайно наткнулся на что-то, роясь вокруг, чтобы отсканировать предметы на поддоне.Вторичная цель заключается в том, что я не мог добавить никаких символов sentinel, потому что это нарушило бы работу существующих сторонних приложений, используемых с сканирующими устройствами.

Однако я уже использовал метод sentinel character раньше, как с помощью KeyPress подсоедините или подключите низкоуровневую клавиатуру с помощью SetWindowsHookEx() или через KeyPreview в основной форме вашей заявки.Если он соответствует вашим требованиям, использовать этот метод определенно намного проще, и с этой целью я присоединяюсь к уже приведенным рекомендациям.

Я думаю, вы справляетесь с этим приемлемым способом, просто будьте осторожны с тем, как быстро карта отправляет данные, у нас есть беспроводные сканеры штрих-кодов, и время от времени они нажимают клавиши на клавиатуре, чтобы ускорить работу приложения.

также, если вы распространяете свое программное обеспечение на других территориях, то расположение клавиш может отличаться, например, в Испании (я думаю, но может быть и во Франции) верхняя строка клавиатуры такая!"£$%^&() в отличие от США / Великобритании 1234567890, и если ваш кард-ридер настроен на США / Великобританию, то он отправит ! "£ $% ^&() вместо 1234567890, поскольку клин просто эмулирует нажатую клавишу, и если Windows интерпретирует ее по-другому, то это ваша проблема.

Еще один голос за идея jttraino.Я делаю почти то же самое с кард-ридерами и считывателями чеков в системах торговых точек, где нам необходимо поддерживать клавиатуру wedge, а также USB и RS232.

По сути, выберите короткую последовательность символов, которые вряд ли будут использоваться с клавиатуры, и запрограммируйте цикл обработки сообщений таким образом, чтобы эти символы появлялись.Если вы получаете завершенный поток символов, соответствующий вашему шаблону, вы можете декодировать остальную часть введенных данных до тех пор, пока не достигнете назначенной конечной последовательности или пока не решите, что входящая последовательность ошибочна.Выберите строку, которую либо сложно, либо невозможно ввести с обычной клавиатуры в вашем приложении, учитывая такие вещи, как редактирование масок и поведение ваших различных экранов.

Хорошей отправной точкой является что-то вроде tilda-pling (~!), поскольку эти символы вряд ли появятся в чьих-либо личных данных и вряд ли когда-либо понадобятся вместе в тексте заметки и т.д.:-)

Недостатком, в точности как сказал jttraino, является то, что вам, вероятно, придется настраивать / программировать каждое устройство чтения самостоятельно.Некоторые производители делают это довольно простым - чей комплект вы используете?Магтек?Уэлч Аллин?

Я второй Идея @jttraino.

Это правильный путь для сканирования штрихов / считывателей кодов и других подобных устройств, которые работают по принципу "подключи и играй" (PnP).Я использовал ту же технику для настройки пары сканеров штрихкодов формата 1D и 2D в моем предыдущем задании.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top