Oh Mann...und ich dachte immer, dass das nur beim Journalhook funktioniert, aber stehe schon wieder vor dem nächsten Problem.
Hier die Hook-Funktion aus Asserbads Tutorial (ein Hook der Typs WH_KEYBOARD_LL wurde gesetzt) :
Delphi-Quellcode:
function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
//es ist ebenfalls möglich die Bearbeitung an eine Bedingung zu knüpfen
//it's possible to call CallNextHookEx conditional only.
Result := CallNextHookEx(0, nCode, wParam, lParam);
case nCode < 0 of
TRUE: exit; //wenn code kleiner 0 wird nix gemacht
//if code smaller 0 nothing has to be done
FALSE:
begin
if wparam = WM_KEYUP then beep;
end;
end;
end;
Wie kriege ich jetzt das 30. Bit des lparam von WM_KEYUP bzw, wie behandle ich WM_KEYUP so dass ich das kann?
Fast das selbe Problem hatte ich schonmal, jedoch habe ich damals einen Journal-Hook benutzt bei dem die Parameter teilweise nicht richtig übergeben werden.
Die Lösung sah so aus:
Delphi-Quellcode:
const
PREV_KEY_STATE = 1 shl 30; // $40000000
begin
// ...
if lparam and PREV_KEY_STATE = PREV_KEY_STATE then Beep;
// Ohne Konstante geht es auch so:
if Odd(lparam shr 30) then Beep;
// ..
end;