MouseHook
-
Hi,
Ich möchte die Maus Aktionen Systemweit abfangen. Habe dazu im FAQ folgenden Betrag gefunden:
http://www.c-plusplus.net/forum/viewtopic.php?t=39184
Da ich den BCB6 habe und dass mit dem Konsolen-Experten nicht ganz kapiert habe, habe die DLL über den DLL-Experten erstellt. Das hat funktioniert, glaube ich zumindest, nun eine DLL habe, ich ich anschliessend auch erfolgreich in mein Testprogi, welches ich ebenfalls aus der FAQ genommen habe eingebunden. Das Problem ist jetzt, dass nichts passiert, wenn ich die rechte Maustaste drücke. Die 6 Labels ändern ihren Wert nicht, auch wird das Fenster nicht in der rechten obern Ecke ausgeführt, wie es sollt und es bleibt auch nicht im Vordergrund, wenn ich ein anderes Fenster anklicke. Hat jemand eine Ahnung woran das liegen kann? ich habe wirklich nur den Code 1 zu 1 kopiert. Gibt es noch jerdens welche CheckBox, welche ich in den Projektoptionen aktivieren, bzw. deaktivieren muss, welche nicht den default Wert haben dürfen?
-
wedmer schrieb:
...auch wird das Fenster nicht in der rechten obern Ecke ausgeführt..
Hab mal die FAQ grob überflogen, aber da steht nix im Code was das Fenster nach rechts oben macht. Da mußt du dich selber drum kümmen.
Tip:
- Hol dir die Auflösung des Bildschirms (wie du das machst steht einiges hier im Forum)
- Nimm dir die Breite deines Formulars.
- Rechte Posi setzen: Screen->Width - Form1->Width = Form1->Left
- Obere Position: Form1->Top = 0
- Und das in einer entsprechende Methode rein tun.
wedmer schrieb:
...wie es sollt und es bleibt auch nicht im Vordergrund, wenn ich ein anderes Fenster anklicke....
Du mußt dein Programm mitteilen das es OnTop bleiben soll. Da gibts ne Option im FormDesigner
Tip:
FormStyle im FormDesigner.
-
wird das nicht hiermit erreicht?
void __fastcall TMouseHookForm::FormCreate(TObject *Sender) { // Den Hook starten SetHook(Handle); // Die Form vor alle anderen Fenster setzen, damit die Maus-Koordianten // immer präsent sind SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); }Ich habe in der BCB Hilfe nichts zu SetWindowsPos gefunden
-
Mach das eher auf in die activate methode oder in der onshow.
-
Suppi jetzt klappts danke schön

-
Wie kann ich den Name des Fensters ermitteln, in das ich geklickt habe?
-
Das weiß ich nicht wie man das direkt macht.
Ich würde das ungefähr so machen:Nach nem Klick, alle Fenster durchsuchen, was aktiv ist. Und dann gucken wie groß (höhe&breite) und die Position (left&top) abfragen. Und dann mit den mausdaten wo er geklickt hat vergleichen. ist das innerhalb von dem Fenster, hat er in das fenster geklickt... Dann den titel auslesen.
Es kann sein, das es auch eine einfachere Methode dazu gibt. Wie gesagt ich weiß nes net ganz genau. Vielleicht gibts nen WinAPI Befehl dazu.
-
Nach nem Klick, alle Fenster durchsuchen, was aktiv ist.
Und wie mach ich das?