Можно ли выборочно блокировать ввод с клавиатуры в Windows? Как? - PullRequest
1 голос
/ 28 сентября 2011

Мое приложение (в C #) должно взаимодействовать со сканером штрих-кода USB, который в основном работает как клавиатура.Он вводит штрих-код с ключом ввода в конце.

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

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

Мое приложение на C #, но у меня нет проблем с C ++ или более нативными решениями, если их легко интегрировать в C #.

Спасибо.

Дополнительная информация:

  1. Вся идея работает на фоне, даже когда он не активен.Он отслеживает поток событий глобального ключа и определяет последовательность штрих-кодов (уже реализованную с помощью Hook).И самое главное, он не мешает нормальным событиям клавиатуры и работе других приложений.Вот почему я не могу заблокировать все ключевые события или сделать его самым верхним.

  2. Я уже могу получить штрих-код.Мне нужно, чтобы другие приложения не могли получить штрих-код.

Ответы [ 2 ]

0 голосов
/ 01 февраля 2012

Проверьте этот проект http://globalmousekeyhook.codeplex.com/

Он также находится в C #, поэтому облегчит ваше кодирование.Похоже, все, что вам нужно, это подключить событие нажатия глобальной клавиши и подавить его, установив значение Handled или что-то подобное.

0 голосов
/ 01 февраля 2012

В конце перехвата клавиатуры вы вызываете CallNextHookEx , чтобы выполнить следующий перехват в цепочке.

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

Примечание: это моя теория, я никогда не пробовал точно то же самое.Я, однако, написал хуки в C ++ и C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...