Pisze sobie z kolegą śmieszny program (chcemy podesłać koledze ;)), który wydaje dźwięki przy ruszeniu klawiaturą lub naciśnięciu klawisza.
Oto funkcja odpowiedzialna za obsługę hooka
procedure MKHook(code: Integer;wparam: wParam;lparam: lParam); stdcall;
var
hook: HHOOK;
begin
PlaySound('dzwiek.wav');
CallNextHookEx(hook,code,wparam,lparam);
end;
Podczas ładowania formularza, zakładany jest hook
procedure TForm6.FormCreate(Sender: TObject);
begin
MH := SetWindowsHookEx(WH_MOUSE_LL,@MouseKeyboardHook,hInstance,0);
GH := SetWindowsHookEx(WH_KEYBOARD_LL,@MouseKeyboardHook,hInstance,0);
end;
(gdzie MH i GH to zmienne typu HHOOK)
Przy wyładowywaniu formy, hooki są zdejmowane
procedure TForm6.FormDestroy(Sender: TObject);
begin
UnhookWindowsHookEx(MH);
UnhookWindowsHookEx(GH);
end;
Problem jest w tym, że program czasami "dziwnie" się zachowuje, np:
- Mysz i klawiatura przestają działać podczas uruchomienia programu (można odzyskać sterowanie za pomocą ctrl + alt + del, wcześniej coś takiego nie występowało)
- Niektóre klawisze przestają działać na jakiś czas (np ctrl, tab, etc)
- Niektóre klawisze zmieniają działanie, np strzałka w górę obraca ekran oO
Wie ktoś o co chodzi i jak to naprawić? ;)