Einzelnen Beitrag anzeigen

Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Globaler Maushook in DLL->Callback-Funktion in Progra

  Alt 17. Sep 2008, 08:39
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 :/
  Mit Zitat antworten Zitat