Читать штрих-код, когда программа не имеет фокуса?

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

W12346S1 is first step of a work
W12346S2 is second step of a work
W12346S3 is third step of a work
...
U123 is a user he read his code to make process
M456 is a machine user do the work on this machine.

поэтому я хочу записывать данные в истинные текстовые поля из первого символа (W, U, M) в событии form_KeyDown() или другом.

(истинные текстовые поля означают, что если пользователь прочитал штрих-код, который начинается с клавиши W, пусть программа запишет данные штрих-кода в «рабочий tekxtbox», или если он прочитает штрих-код, который начинается с U, программа запишет данные штрих-кода в пользовательское текстовое поле и т. д.

) Я хочу, чтобы коды могли выбирать свои собственные текстовые поля. каков путь?

примечание: если я использую textbox1.Text += e.KeyData.ToString();
вывод: ShiftKey, ShiftW, ShiftD1D2D3D4D6ShiftKey, ShiftS, ShiftD2 W12346S2 для W12346S2


person Rapunzo    schedule 18.07.2011    source источник
comment
Непонятно, что вы спрашиваете. Что вы подразумеваете под настоящими текстовыми полями?   -  person Icemanind    schedule 18.07.2011
comment
Я бы предположил, что вам понадобится какая-то служба, которая будет перехватывать вывод устройства чтения штрих-кода, а затем отправлять его в ваше работающее приложение. Вы создали сервис?   -  person Mark Kram    schedule 18.07.2011
comment
@icemanind истинные текстовые поля означают, что если пользователь прочитал штрих-код, который начинается с клавиши W, пусть программа запишет данные штрих-кода в рабочий tekxtbox, или если он прочитает штрих-код, который начинается с U, программа запишет данные штрих-кода в пользовательское текстовое поле и т. д.   -  person Rapunzo    schedule 19.07.2011


Ответы (2)


Разве вы не можете просто прочитать в тексте и получить что-то вроде этого:

string FirstChar = BarcodeString.Substring(0,1);
if (FirstChar.Equals("W"))
    WorkTextBox.Text = BarcodeString;
if (FirstChar.Equals("U"))
    UserTextBox.Text = BarcodeString;
person Icemanind    schedule 19.07.2011
comment
спасибо, но я уже сделал, что это второй этап, я изменил вывод, например, barkod += e.KeyData.ToString().Replace(Key, ).Replace(Shift, ).Replace(D, ).Replace(, , ) ; - person Rapunzo; 19.07.2011

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

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

person supercat    schedule 18.07.2011