function MsgProc(Code: integer; wParam: Word; lParam: Longint): Longint; stdcall;
begin
if (Code = HC_ACTION) and (((lParam shr 16) and KF_UP) = 0) then
begin
showmessage(inttostr(w1));
result := 1;
end else result := CallNextHookEx(0, Code, wParam, lParam);
end;
procedure setHook(Hook: boolean) stdcall;
begin
if Hook then
if myHook = 0 then myHook := SetWindowsHookEx(WH_KEYBOARD, @MsgProc, HInstance, 0)
else
begin
if myHook <> 0 then UnHookWindowsHookEx(myHook);
myHook := 0;
end;
end;
procedure start; stdcall;
begin
w1:=555555;
end;
exports setHook name 'SetHook', start name 'start';
begin
end.
в программе грузится статически.
procedure setHook(Hook: boolean) stdcall; external 'hook.dll' name 'SetHook';
procedure start; stdcall; external 'hook.dll' name 'start';
из программы при onshow идет start и потом sethook.
процедура start выполняется один раз при запуске программы. происходит присвоение глобальной переменной w1.
внимание вопрос.
когда приложение, которое вызвало эту длл в фокусе, showmessage w1 показывает нужное значение 555555,
но когда без фокуса начальное значение переменной 44.
почему?