Я использую Delphi и пытаюсь считывать данные со сканера штрих-кода через USB, так что это просто еще одно устройство интерфейса пользователя.
Я правильно понимаю цифры, но получаю каждый дважды. Я представляю, что это ключ вниз и ключ вверх.
Я мог бы; стучите по нему флагом и игнорируйте второе чтение, но лучше сделайте это правильно.
Мой код немного адаптирован с по этой ссылке .
Могу ли я указать, что я хочу только события key_up при назначении ловушки?
KBHook := SetWindowsHookEx(WH_KEYBOARD,
@KeyboardHookProc,
HInstance,
GetCurrentThreadId()) ;
или как-то проверить флаг внутри самой функции ловушки?
Обновление: я пытался кодировать его, но, похоже, я ошибся. Вот что я попробовал в начале моей функции ловушки
// http://msdn.microsoft.com/en-us/library/windows/desktop/ms644984%28v=vs.85%29.aspx
if Code < 0 then
begin
Result := CallNextHookEx(KBHook, Code, WordParam, LongParam);
Exit;
end;
if (((LongParam and $80000000) <> $80000000) (* key is not being released *)
and ((LongParam and $40000000) <> $40000000)) (* key was not previously down *) then
begin
Result := CallNextHookEx(KBHook, Code, WordParam, LongParam);
Exit;
end;
[Дальнейшее обновление] Пять лет спустя, и это все еще не помогает, но я обнаружил, что мой оригинальный дополнительный вопрос (q.v) делает.