#.net #api
#.net #API
Вопрос:
я хочу изменить виртуальный ключ после нажатия клавиши, я использовал необработанные входные данные для получения информации об устройстве. Фактически, у меня есть две клавиатуры (клавиатура и сканер штрих-кода), и с помощью необработанного ввода я могу получить, что набор клавиш поступает с одной. Но мне нужно проверять виртуальные ключи, если они поступают из сканера штрих-кода. Измените их на "KeyChar = Convert.ToChar(0);"
возможно ли это, тогда как?
Ответ №1:
Я не уверен, о чем вы спрашиваете или в какой конкретной среде вы находитесь, но я работал со сканерами штрих-кодов с использованием Winforms, и у меня было требование сначала извлечь отсканированный текст, что-то изменить в нем, а затем отправить его в форму. Фиксировать нажатия клавиш легко, но как вы узнаете, поступают ли они со сканера штрих-кода или с клавиатуры?
Трюк, который я использовал, заключается в формате штрих-кода. Обычно у них есть знак начала и остановки, что-то вроде $. Используйте свой сканер и отсканируйте что-нибудь в блокноте, и вы увидите.
Затем используйте этот знак как способ начать фиксировать нажатия клавиш. Итак, для каждого $ вы начинаете захватывать каждое следующее нажатие клавиши, затем на следующем $ вы останавливаете захват, берете эту строку и делаете с ней все, что хотите. Отправьте результат обратно в форму с помощью SendKeys (при условии, что вы, по крайней мере, удалили знак запуска / остановки).
Обратите внимание, это работает только со штрих-кодами code-xxx. Что касается стандартов GTIN, они часто не используют знак запуска или остановки, поэтому они немного сложнее.
Комментарии:
1. хорошо. я знал это. но как вы можете прекратить отправлять входные данные сканера штрих-кодов в другое приложение?
2. @raha Ах, хорошо, я не знал, что вы хотите перехватывать отсканированные данные между сканером и другим приложением. Я предположил, что сканер отправил данные в ваше собственное приложение. Тогда, вероятно, потребуется что-то еще.
Ответ №2:
Переопределите предварительную обработку сообщений и обрабатывайте сообщения с клавиатуры.
Комментарии:
1. как я могу изменить виртуальный ключ с помощью PreProcessMessage?
2. спасибо. можете ли вы это объяснить. правильно ли это: если (m.Msg == WM_KEYDOWN) { m.wParam = (IntPtr)((Ключи) Преобразовать. ToChar(65)); } возвращает базу. Предварительная обработка сообщения (ссылка m);