Преобразование ввода RS232 в события клавиатуры в Windows - PullRequest
0 голосов
/ 18 января 2011

Мне нужно ввести события клавиатуры в операционную систему (Windows).

Общая картина такова, что мне нужно преобразовать устройство RS232 (аналогично сканеру штрих-кода) в «устройство, эмулируемое USB-клавиатурой».Существует фоновое приложение, которое управляет устройством rs232, и как только оно получает данные, данные должны быть преобразованы в события клавиатуры, которые будут получены активным приложением, приложением Point Of Sale.

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

Идеи?

Ответы [ 3 ]

1 голос
/ 18 января 2011

Если я правильно понял ваш вопрос, вы можете посмотреть SendInput(...) здесь: http://msdn.microsoft.com/en-us/library/ms646310(v=vs.85).aspx

Поскольку вы не указали язык, я предположил C.

Например:

    INPUT inp;

    memset(&inp, 0, sizeof(INPUT));
    inp.type = INPUT_KEYBOARD;
    inp.ki.wVk = VK_ESCAPE;
    SendInput(1, &inp, sizeof(INPUT)); //send keyDown Event
    inp.ki.dwFlags = KEYEVENTF_KEYUP;
    SendInput(1, &inp, sizeof(INPUT)); //send KeyUp Event
0 голосов
/ 18 января 2011

Вы, вероятно, должны начать смотреть на BlockInput / SendInput.

Они появились после того, как я сделал свое приложение.Я использую PostMessage для отправки сообщений WM_KEYDOWN / WM_KEYUP в активное окно.Это эффективно, но имеет множество проблем.(Например, вы должны установить состояние сдвига клавиатуры для прописных букв. Thunderbird требует от вас медленной отправки обратных символов.)

0 голосов
/ 18 января 2011

Почему бы не записать запись последовательного порта как событие и повторно отправить ключи класса SendKeys ? Драйверы довольно сложны для записи / тестирования (глючный драйвер может закрыть BSOD) На каком языке вы планируете это делать?

...