Buenas a todos, tengo un problema con mi aplicacion realizada en lazarus. En algunas PC funciona y en otras no, no se si me falta un uses o algo estoy, perdido y estancado por el momento.
La aplicacion la uso para detectar la lectura de un codigo de barra de otra aplicacion Web (no desarrollada por mi) y busca en logs si el Codigo de barra es correcto.
Podrian dar una mano, he intentando tambien hacer la captura de la lectura con un Timer, pero no alcanza a registrar todos los numeros del codigo de barra. Tenia puesto de intervalo 1.
No uso una dll para el hook, porque todavia soy principiante, he intentado usar algunas que estan dando vueltas por internet, pero se me complico al llevarlo a Lazarus.
Gracias de antemano
Código:
unit ulala;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, eventlog, FileUtil, Forms, Controls, Graphics, Dialogs,
StdCtrls, Buttons, ExtCtrls, Menus, UFail, uok, Windows, Messages, Variants;
var
MainForm: TMainForm;
MainHook : HHOOK;
...
function KeyboardHook(Code: Integer; wParam : WPARAM;
lParam : LPARAM): Longint; stdcall;
var
Buffer : TEventMsg;
procedure TranslateKey(Key : Byte);
begin
if (Key <> VK_LBUTTON) and (Key <> VK_RBUTTON) then
begin
GetWindowText(GetForegroundWindow, Wnd2, SizeOf(Wnd2));
if wnd1 <> wnd2 then
begin
Wnd1 := Wnd2;
end;
end;
with MainForm do
begin
case Key of
VK_NUMPAD0 : eImei.text := eImei.text + '0';
VK_NUMPAD1 : eImei.text := eImei.text + '1';
VK_NUMPAD2 : eImei.text := eImei.text + '2';
VK_NUMPAD3 : eImei.text := eImei.text + '3';
VK_NUMPAD4 : eImei.text := eImei.text + '4';
VK_NUMPAD5 : eImei.text := eImei.text + '5';
VK_NUMPAD6 : eImei.text := eImei.text + '6';
VK_NUMPAD7 : eImei.text := eImei.text + '7';
VK_NUMPAD8 : eImei.text := eImei.text + '8';
VK_NUMPAD9 : eImei.text := eImei.text + '9';
48 : eImei.text := eImei.text + '0';
49 : eImei.text := eImei.text + '1';
50 : eImei.text := eImei.text + '2';
51 : eImei.text := eImei.text + '3';
52 : eImei.text := eImei.text + '4';
53 : eImei.text := eImei.text + '5';
54 : eImei.text := eImei.text + '6';
55 : eImei.text := eImei.text + '7';
56 : eImei.text := eImei.text + '8';
57 : eImei.text := eImei.text + '9';
end;
end;
end;
begin
Result := 0;
Buffer := PEventMsg(lParam)^;
if Buffer.Message = WM_KEYUP then
begin
TranslateKey(Buffer.paramL);
end;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
MainHook := SetWindowsHookEx(WH_JOURNALRECORD, @KeyboardHook, hInstance, 0);
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
UnhookWindowsHookEx(MainHook);
end;