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

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

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

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

5 ответов


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

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

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

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


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

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


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

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


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

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

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

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


Я @ jttraino идея.

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