Ограничить ввод определенным устройством в C#

У меня есть два устройства (KeyBoard и BarCodeScanner) и 2 текстовых поля (текстовое поле 1 и текстовое поле 2).

Теперь я хочу ограничить пользователя тем, что он может использовать клавиатуру только в текстовом поле 1 и сканер штрих-кодов в текстовом поле 2.

Как это возможно в С#?


person Zain Ali    schedule 25.04.2011    source источник
comment
возможный дубликат Как мне сказать, поступает ли ввод с клавиатуры со сканера штрих-кода? Как только мы выяснили, что на самом деле хотел этот парень, я думаю, что изменения, которые я внес в свой ответ, оказались довольно исчерпывающими.   -  person Cody Gray    schedule 25.04.2011


Ответы (3)


Вы должны взглянуть на это: Чтение данных из сканера штрих-кода в приложении Windows .net (C#)!

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

Я подозреваю, что сканер вводит код мгновенно, поэтому у вас будет огромная скорость набора текста.

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

person Liviu Trifoi    schedule 25.04.2011
comment
последовательность специальных символов будет разной для каждого сканера, поэтому мое приложение станет зависимым от модели штрих-кода. Могу ли я как-то обобщить это? - person Zain Ali; 27.04.2011
comment
Не на 100% надежный способ. Единственная идея, которая у меня есть, состоит в том, чтобы обнаружить это, измеряя, когда кто-то вводит символы со скоростью, превышающей скорость набора текста человеком, как я описал во второй части своего ответа. Но это хаки. - person Liviu Trifoi; 27.04.2011

Я работал со сканером штрих-кода только один раз. В моем сканере можно было заставить его генерировать специальную управляющую последовательность перед передачей данных на компьютер. Это поведение было освоено с помощью собственного программного обеспечения сканера. Но я не могу указать какие-либо подробности, потому что я не участвовал в настройке - мой коллега настроил его до меня.
В моем случае сканер отправил Ctrl + J перед датой сканирования, и я смог определить, из какого источника поступает ввод с клавиатуры или из Сканер штрих-кода.

person Anton Semenov    schedule 25.04.2011

Я думаю, это зависит от того, как подключен сканер. Если он просто подключен между компьютером и клавиатурой, вам не повезло, поскольку не будет никакого надежного способа отличить ввод с клавиатуры от ввода со сканера.

Если он подключен отдельно, должны быть какие-то средства для получения данных сканера, возможно, посредством класса, предоставляемого программным обеспечением сканера, поэтому вы должны использовать то, что там есть, и помещать все, что вы получаете, в TextBox2.Text. Что касается отключения ввода с клавиатуры для этого поля, вы можете просто запретить любой ввод, установив TextBox2.ReadOnly = true.

person takrl    schedule 25.04.2011