Estoy usando Delphi y tratando de leer desde un escáner de código de barras a través de USB, por lo que es simplemente otro dispositivo de interfaz humana.Anclaje de teclado de Windows informando todo dos veces
obtengo los dígitos correctamente, pero obtengo cada uno dos veces. Me imagino que esto es clave y clave.
Podría; kludge con una bandera e ignora la segunda lectura, pero prefiere hacerlo de forma adecuada.
Mi código se ha modificado ligeramente de this link.
¿Puedo especificar que solo deseo eventos key_up al asignar el gancho?
KBHook := SetWindowsHookEx(WH_KEYBOARD,
@KeyboardHookProc,
HInstance,
GetCurrentThreadId()) ;
o de alguna manera comprobar una bandera dentro de la función de enlace?
Actualización: Intenté codificarlo, pero parece que lo hice mal. Esto es lo que he intentado en el inicio de mi función de enlace
// 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;
[Además de actualización] Cinco años después, y esto todavía no ayuda, pero me parece que mi original follow-up question (q.v) hace.
consiguió este trabajo? Si no, ¿puede dar detalles sobre el escáner? –
+1 lo siento, estaba fuera por negocios. Verificará el lunes. Supongo que tiene que ver conmigo también verificando el estado de la tecla anterior, que probablemente no sea necesario al leer un escáner de código de barras. – Mawg
Lolx !! Cinco años después, tengo el mismo problema. Google y encuentre una pregunta que coincida perfectamente con mi problema actual, ¡y es mi pregunta! Gracias, Jim por la respuesta. – Mawg