Поймать ввод от считывателя магнитных карт в переменную
Я не могу найти способ поймать вход считывателя магнитных карт. Когда это происходит, входные данные попадают в активный текстовый редактор, например, в блокнот.
К сожалению, фокус на поле текстового поля не сработает, потому что я должен сделать его меткой вместо текстового поля. Таким образом, мне нужен способ перехватить ввод с USB-устройства в переменную или метку.
Кто-нибудь знает класс.NET, который я мог бы использовать, чтобы сделать это или какие-нибудь лучшие идеи?
2 ответа
Я не думаю, что в любом случае вы сможете предотвратить ручной ввод данных пользователем. Я подозреваю, что кард-ридер у вас эмулирует клавиатуру. Таким образом, чтобы иметь возможность читать с устройства чтения, вы должны получать ввод с клавиатуры, а ввод с клавиатуры означает, что пользователь может вводить все, что ему нравится.
Возможное решение - заменить кардридер на тот, который использует API для чтения с карточек.
Если получить лучший кард-ридер не вариант, я думаю, что лучший способ сделать это - иметь кнопку. Когда кнопка нажата, откройте новую форму, содержащую предоставленный код @Bala R. Но кроме того, закройте форму в течение 1 секунды после ввода первой клавиши. Это предотвратит вмешательство пользователя вручную, но предоставит читателю достаточно времени для завершения.
Если это приложение winforms, вы можете сделать
private void Form1_Load(object sender, EventArgs e)
{
KeyPreview = true;
KeyPress += Form1_KeyPress;
}
private bool inputToLabel = true;
void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
if (inputToLabel)
{
label1.Text = label1.Text + e.KeyChar;
e.Handled = true;
}
else
{
e.Handled = false;
}
}
и пока окно имеет фокус, символы нажатия клавиш будут переходить к тексту метки.