AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Mousehook in Klasse/Komponente ?!
Thema durchsuchen
Ansicht
Themen-Optionen

Mousehook in Klasse/Komponente ?!

Ein Thema von DataCool · begonnen am 29. Apr 2009 · letzter Beitrag vom 30. Apr 2009
Antwort Antwort
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#1

Mousehook in Klasse/Komponente ?!

  Alt 29. Apr 2009, 12:39
Hi,

ich schreibe gerade eine Klasse in der unter anderem die Maus gehooked werden soll.
Zum hooken selber gibt es ja hier genug Beschreibungen/Anleitung;
allerdings weiß ich nicht wie ich den hook innerhalb einer Klasse starten soll,
den wenn ich die Callback function für den Hook innerhalb der Klasse habe wird diese nicht aktzeptiert.
Habe ich die Function außerhalb der Klasse fehlen mir zur weiteren Verarbeitung Werte aus der Klasse

Wie kann mann das umgehen ?

Delphi-Quellcode:
function MouseProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var CtrlID: Word;
    tmpComponent : TComponent;
begin
  case nCode < HC_ACTION of
    True:
      Result := CallNextHookEx(FMouseHook, nCode, wParam, lParam);
    else
      CtrlID := GetDlgCtrlId(PMOUSEHOOKSTRUCT(lParam)^.HWND);
    // mouse over an other control ??
    if FlastID <> CtrlID then begin
      FLastID := CtrlID;
    end;
    // did we have an double click event ?
    if wParam = WM_LBUTTONDBLCLK then begin
      MessageBeep(0);
      // ^ Zum Test ^
    end;
  Result := CallNextHookEx(FMouseHook, nCode, wParam, lParam);
end;
Delphi-Quellcode:
  FMouseHook := SetWindowsHookEx(WH_MOUSE, @MouseProc, 0, GetCurrentThreadId());
  // ^^ schlägt fehl wenn MouseProc member der Klasse ist ......
1. Frage: Wie kann ich den Hook innerhalb der Klasse sauber realisieren ?
2. Frage: Wie bekomme ich die Komponente auf der WM_LBButtonDBLCLK ausgeführt wird ?

Danke,

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Mousehook in Klasse/Komponente ?!

  Alt 30. Apr 2009, 07:58
1. Suche nach MakeProcInstance! Luckie hat dazu etwas hier und wahrscheinlich auch bei sich auf der Hausseite geschrieben.
2. WindowFromPoint
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Mousehook in Klasse/Komponente ?!

  Alt 30. Apr 2009, 11:26
Hi,

vielen Dank das hat mich auf die richtige Spur gebracht.
Gelöst habe ich es jetzt mit folgenden Tipp:

Callback in Klasse

Meine 2. Frage hat ich mittlerweile schon selber gelöst, aber nicht mit WindowFromPoint,
sondern mit : FindDragTarget(Mouse.CursorPos,true);

Meine Ziel ist mit dem Hook, dem Benutzer der Anwendung in einem bestimmten Modus die Möglichkeit zu geben
die Komponenten selber zu wählen, um dann mit dieser Auswahl bestimmte Einstellungen zu treffen.

Oder könnte man das ganze noch anders angehen ? Wie macht es die Ide ?

DAnke & Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz