Zitat von
toms:
Probier's mal so:
Delphi-Quellcode:
if ((lParam shr 30) and 1) = 1 then // Taste erneut gedrückt
if ((lParam shr 31) and 1) = 1 then // Taste losgelassen
Grundlegend funktioniert diese Variante. Habe ich lParam getestet den ich in eine KBDLLHOOKSTRUCT gelesen habe.
//Key Up
if ((lParam.flags shr 7) and 1) = 1 then
ShowMessage('Taste wurde losgelassen');
ABER:
Die Definition des wParam sieht so aus:
Zitat:
wParam
[in] Specifies the identifier of the keyboard message. This parameter can be one of the following messages: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, or WM_SYSKEYUP.
und die von WM_KEYDOWN so:
Zitat:
WM_KEYDOWN
WPARAM wParam
LPARAM lParam;
Jetzt bräuchte ich das 30. Bit des lParam von WM_KEYDOWN welches der wParam der Callback-Funktion ist.
Habe versucht das so hinzukriegen:
Delphi-Quellcode:
function KeyboardHookProc(nCode: Integer; wParam: PMSG; lParam: PKBDLLHOOKSTRUCT): 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, cardinal(wParam), Cardinal(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^.lparam shr 30) and 1) = 1 then
ShowMessage('beim ersten Mal tuts noch weh');
end;
end;
end;
Bei der Abfrage If ((wParam^.lparam shr 30) and 1) = 1 then ... gibt es jedes Mal eine Zugriffsverletzung :/