Einzelnen Beitrag anzeigen

Benutzerbild von idontwantaname
idontwantaname

Registriert seit: 31. Aug 2004
Ort: Traiskirchen
575 Beiträge
 
Turbo Delphi für Win32
 
#1

Message wird nicht gesendet bei globalem Hook

  Alt 11. Aug 2006, 15:37
Hallo !!

Ich habe mich heute mit Hooks beschäftigt und bin auf diesesHook Tutorial gestoßen. Und das ganze funktioniert schon ganz gut. Bei globalen Hooks empfiehlt der Autor, per MMF Daten an die eigene Anwendung zu schicken. Mir war das zu kompliziert, deshalb habe ich überlegt, ich schicke meinem Fenster einfach eine Message (WM_USER + x) und passe den wParam und lParam nach meinen Wünschen an. Das funktioniert auch, aber nur so lange meine eigene Form im Vordergrund ist.
Das ist natürlich sehr seltsam. Zum schicken der Nachricht verwende ich SendMessage. Der Fehler liegt auch bei dieser Funktion, denn die Hook-Prozedur wird auch ausgeführt, wenn mein Fenster im Hintergrund ist.

Hier mal ein bisschen Code, vielleicht hilft er euch ja weiter.
Delphi-Quellcode:
// aus der DLL

const
  WM_MOUSEHOOKMSG = WM_USER + 1;

var
  GlobalHooksFormHandle: HWND = 0;
  MouseHookHandle: HHOOK = 0;

function MouseHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
  LMouseHookStruct: TMouseHookStruct;
  LMousePositionX: Integer;
  LMousePositionY: Integer;
begin
  if nCode = HC_ACTION then
  begin
    LMouseHookStruct := PMouseHookStruct(lParam)^;
    LMousePositionX := LMouseHookStruct.pt.X;
    LMousePositionY := LMouseHookStruct.pt.Y;

    if GlobalHooksFormHandle <> 0 then
      SendMessage(GlobalHooksFormHandle, WM_MOUSEHOOKMSG, LMousePositionX, LMousePositionY);
  end;

  Result := CallNextHookEx(MouseHookHandle, nCode, wParam, lParam);
end;

function InstallHooks(AGlobalHooksFormHandle: HWND): Boolean; stdcall;
var
  LMouseHookProc: TFNHookProc;
begin
  GlobalHooksFormHandle := AGlobalHooksFormHandle;

  LMouseHookProc := MouseHookProc;
  MouseHookHandle := SetWindowsHookEx(WH_MOUSE, LMouseHookProc, HInstance, 0);

  Result := MouseHookHandle <> 0;
end;
Habt ihr Ideen, wieso er die Message nicht mehr schickt ??

Falls euch der Code nicht reicht, ich hab mal die ganze Projektgruppe angehängt.

Vielen Dank schon mal im Voraus,
Oliver
Angehängte Dateien
Dateityp: rar globalhooks_957.rar (187,1 KB, 6x aufgerufen)
Oliver Hanappi
  Mit Zitat antworten Zitat