Можно ли заглянуть в буфер ввода с клавиатуры и обнаружить запись штрих-кода в MFC / Win32? - PullRequest
0 голосов
/ 27 февраля 2019

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

MyПервоначально предполагалось сделать паузу на мгновение, когда будет доступен первый символ, затем проверить, сколько символов доступно во входном буфере, и обработать ввод как штрих-код, если ожидается несколько символов.Однако это не работает - std::cin.rdbuf()->in_avail() всегда возвращает ноль:

Sleep( 50 );
const char ch( std::cin.get() );
std::cin.putback( ch );
if ( std::cin.rdbuf()->in_avail() >= 6 )
{
    // code never reached :-(
}

Приведенный выше код был вставлен в контексте переопределения PreTranslateMessage() для сообщения WN_KEYDOWN.Может ли быть так, что сообщения еще не переведены, и поэтому std::cin не имеет доступа к символам?Если да, то можно ли определить, сколько WM_KEYDOWN сообщений поставлено в очередь вместо количества символов?Не совсем понятно, как это сделать с помощью API MFC и / или Win32.

1 Ответ

0 голосов
/ 28 февраля 2019

Во-первых, оконная программа, если вы не вызываете AllocConsole, не имеет stdin/stdout/stderrGetStdHandle(STD_INPUT_HANDLE) всегда потерпит неудачу.Так что этот метод не применим.

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

Другие нерекомендованные решения:

  1. Оцените интервал между WM_KEYDOWN и WM_KEYUP.
  2. Оцените интервал между двумя нажатиями клавиш.Если это медленнее, это ввод с клавиатуры, иначе сканер штрих-кода.(Не подходит для отправки команды через ввод с клавиатуры для имитации кода)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...