измените виртуальный ключ после нажатия клавиши и отправьте приложению

#.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);