POMOCY- zawieszanie się aplikacji przzy SetWindowsHookEx

0

Witam, potrzebuje pilnie pomocy jak rozwiązać pewien problem.

Mam mieć aplikację, która przechwytuje komunikaty z całego systemu klawisze funkcyjne na pocżtek mam napisać F1 do F12. Wiem że do tego jest funkcja SetWindosHookEx i powinienem użyć parametru
WM_KEYBOARD jednak w systemie XP, nie działa nic takiego, czytałem na forum że powininem taką funkcję wrzucić do biblioteki, ale też próbowałem innym ważnym elementem jest iż naciśnięty klawisz funkcyjny bedzie wykonywał określone zadania, wieć wstępnie biblioteka odpada powninienem mieć wynik.

Znalazłem opcję do funkcji która mi zadziałała to użyłem parametru WM_JOURNALRECORD, jednak po długich testach, i nagłym i powtórynym naciskaniu klawisz F12 program się zawiesza jaki jest powód, o tyle mam przekichane że wynok muszę przedstawić na formie i przesłać do serwera to mam zrobione tylko te przechwytywanie.

Kod:
function ReadKeyboard(Code: integer; wParam, lParam: Longint): Longint; stdcall;
var
Key: char;
KeyCode: Byte;
begin
Result := 0;
case Code of
HC_ACTION:
begin
MessageBuffer := PEventMsg(lParam)^;
if MessageBuffer.message = wm_KeyDown then
begin
Key := Chr(MessageBuffer.paramL);
KeyCode := Ord(Key);
if (KeyCode >= 112) and (KeyCode <= 123) then
AIClientApp.ActionList.ExecuteID(MESSAGE_TYPE_EVENT, KeyCode);
Result := 0;
//próbowałem wyłączyć nawet opcje przesyłania i analizy AIClientApp.ActionList.ExecuteID(MESSAGE_TYPE_EVENT, KeyCode); ale aplikacja nadal się zawiesz

                      end;
              end;
    else
      begin
        Result := CallNextHookEx(Hook, Code, wParam, lParam);
      end;

end;
end;

procedure TAIClientApp.ControllerConnected(Sender: TObject);
begin
Connect.Enabled := False;
Disconnect.Enabled := True;
Hook := SetWindowsHookEx(WH_JOURNALRECORD, @ReadKeyboard, hInstance, 0);
end;

Proszę o pomoc, bo mam mało czasu a nigdzie nie mogę znaleŹć rozwiązania

0

Znalazłem inny sposób

function ReadKeyboard(Code: integer; wParam, lParam: Longint): Longint; stdcall;
var
pkbhs: PKBDLLHOOKSTRUCT;
TID : DWORD;
S : String;
begin
Result := 0;
case Code of
HC_ACTION:
begin
if (wParam = Wm_KEYUP) then
begin
pkbhs := PKBDLLHOOKSTRUCT(lParam);
if (pkbhs.vkCode = VK_F12) then
CreateThread(NIL, 0, @GetMsg, @pkbhs.vkCode, 0, TID);
end;
Result := 0;
end;
else
begin
Result := CallNextHookEx(Hook, Code, wParam, lParam);
end;
end;
end;

Hook := SetWindowsHookEx(WH_KEYBOARD_LL, @ReadKeyboard, hInstance, 0);

Tylko mam problem, zawiesza się tylko przy przycisku F12 dalczego ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1