Witam Jezeli taki temat juz byl to przepraszam. Zdecydowalem sie napisac nowy post poniewaz nie znalazłem takiego ani tutaj ani w -oo-.
pisze sobie własnego hooka do przechwytywania współrzednych kursorka myszki i wciskanych klawiszy.
Hooka osadzilem w DLL aby był globalny.
Hook na myszke dziala tak jak sobie to wymyslilem - na pewno moze byc lepszy ale taki mi wystarczy.
Hook na klawiature dziala w sposób niezadawalajacy :( Owszem przechwytuje "zczytuje" klawisze ale wyswietla je dwa razy.Jezeli sie nie myle to moj hook wykrywa klawisz 2 razy daltego ze przy piszac literke na klawiaturze powstaja dwa zdarzenia wm_KeyDown i wm_KeyUp Domyslam sie ze dlatego moja procedurka wypisuje 2 razy ten sam znak np: "OOKKOO" gdyz sprawdzam tylko jego kod. Gdyz nie wiem jak sprawdzic dodatkowe informacje o wcisnietym klawiszu. Oto czesc kodu DLL. Prosze o pomoc w sprawdzeniu wystepowania zdarzenia wm_keydown
library MouseHook;
uses
Forms,
Windows,
Messages,
HookCommon in 'HookCommon.pas';
{$J+}
const
Hook: HHook = 0;
KHook: HHook = 0;
{$J-}
{$R *.res}
function HookProc(nCode: Integer; MsgID: WParam; Data: LParam): LResult; stdcall;
begin
// wspołrzędne myszki
end;
procedure HookMouse; stdcall;
begin
// ustawienie hooka na mysz
end;
procedure UnHookMouse; stdcall;
begin
// zdjecie hooka
end;
function KeybHookProc(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall;
// w Lparam powinny byc zapisane dodatkowe informacjie
begin
/ if lparam = wm_keydown then / proste porównanie ze stała //wm_keydown// nie dziala
if ((wparam>=48) and (wparam<=57)) or ((wparam>=65) and (wparam<=90)) then
begin
PostMessage(FindWindow('TForm1', nil), KeyHookMessage, Wparam, Lparam); //wysyłam komunikat do aplikacji // z kodem klawisza
end;
Result:=CallNextHookEx(KHook,Code,wParam,lParam);
end;
Procedure HookKey; stdcall;
begin
//hook na klawiature
end;
Procedure UnHookKey; stdcall;
begin
UnHookWindowsHookEx(KHook);// zdjecie hooka
KHook:=0;
end;
exports
HookMouse, UnHookMouse, HookKey, UnHookKey;
begin
end.
Pomózcie prosze :)