Witam
Mam problem, korzystając ze wszystkiego co mogłem napisałem prostego keylogera, który ma działać na formie Delphi, ponieważ nie udało mi się znaleźć nic co łapie wszystko co się dzieje na formie (klawisze) napisałem klasycznego łapiącego wszystko i ograniczam go do działania w chwili gdy forma aktywna.
type
KeybdLLHookStruct = record
vkCode : cardinal;
scanCode : cardinal;
flags : cardinal;
time : cardinal;
dwExtraInfo : cardinal;
end;
var
hkHook: hHook;
function LowLevelKeyboardProc(code: Integer; WParam: WParam; LParam: LParam): LRESULT stdcall;
var
AChr: array[0..1] of WideChar;
ScanCode: integer;
Str: widestring;
kState : TKeyboardState;
lpChar : Word;
info : ^KeybdLLHookStruct absolute lParam;
begin
try
with info^ do
case wParam of
wm_keydown : begin
GetKeyboardState(kState);
if ToAscii(vkCode, scanCode, kState, @lpChar, 0) > 0 then
begin
if ((lpChar>=32) AND (lpChar<=126)) then
begin
str:=char(lpChar);
end
end;
end;
end;
finally
Result := CallNextHookEx(hkHook, code, WParam, LParam);
end;
end;
procedure HookIt;
begin
hkHook := SetWindowsHookEx(13, @LowLevelKeyboardProc, hInstance, 0);
end;
procedure UnHookIt;
begin
UnHookWindowsHookEx(hkHook);
end;
Wszystko działa do momentu, aż dodam do projektu nową formę i zrobię Form2.ShowModal; wówczas nie mam pojęcia jak nadal korzystać z tego keylogera na drugiej formie, skopiowałem nawet cały kod na drugą formę i usunąłem z pierwszej i mimo to nie chce on działać na form2. Co zrobić, żeby keyloger łapał wszystko z głównej formy i form modalnych? Nie interesują mnie inne okna i programy tylko formy, które otwiera/pokazuje program w delphi.
Zauważyłem ciekawą rzecz, jak na formie modalnej uruchomię keylogera 2 razy (HookIt) to zaczyna działać ale gubi znaki, które są znakami przejściowymi czyli jak na przykład wcisnę SHIFT i X to nie wyświetli się nic po powtórzeniu wyświetli się X jak puszczę SHIFT i coś wcisnę to również nic się nie wyświetli dopiero kolejne wciśnięcie tego klawisza zadziała.