Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wiedermal Maushook (https://www.delphipraxis.net/92437-wiedermal-maushook.html)

Delphi-Fan-Friedrichsdorf 8. Jun 2007 14:42

Re: Wiedermal Maushook
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo halinchen,
wenn du das Fensterhandle unter der Maus willst brauchst du keine Maushook.
Ich benutze Delphi 5 und mach das so:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);// Interval so klein wie möglich(,aber nicht kleiner als 200 würde ich sagen, sonst wird es zu langsam.)

var pos:TPoint;
    h:THandle;
    WinCaption : string;
    Len: integer;
begin

GetCursorPos(pos); //Mausposition abfragen
h:=WindowFromPoint(pos); //Fenster-handle an dieser Position speichern

Label1.Caption:='Mausposition: '+IntToStr(pos.x)+'/'+IntToStr(pos.y); //Nich so wichtig: Mausposition anzeigen

if h>0 then //Handle prüfen
begin

 Len := GetWindowTextLength(h); //Titellänge abfragen
 SetLength(WinCaption, Len); //Länge setzen
 GetWindowText(h, PChar(WinCaption), Len+1); //Text holen

 Label2.Caption:='Fenstertitel: '+WinCaption; //Titel anzeigen

end else Label2.Caption:='Fenstertitel: Kein Titel'; //Fehlerbehandlung

end;

SirThornberry 8. Jun 2007 14:53

Re: Wiedermal Maushook
 
also wenn ich mir das Beispiel angucke bekomm ich Angst. :shock: Da wird doch nicht etwa in jeden gehookten Prozess noch ein Form mit gepackt? Leider ist das Projekt unvollständig so das man auch nicht sehen kann ob das Form auch in jedem Prozess instanziert wird mit Laden der dll. Wenn dem nicht so ist bekomme ich noch mehr angst weil dann in jedem Prozess eine Zugriffsverletzung vorprogrammiert ist.
Wer solche Dinge nutzt sollte tunlichst auch wissen was er da macht!

bitsetter 8. Jun 2007 15:11

Re: Wiedermal Maushook
 
Zitat:

Zitat von SirThornberry
Leider ist das Projekt unvollständig so das man auch nicht sehen kann ob das Form auch in jedem Prozess instanziert wird mit Laden der dll. Wenn dem nicht so ist bekomme ich noch mehr angst weil dann in jedem Prozess eine Zugriffsverletzung vorprogrammiert ist.
Wer solche Dinge nutzt sollte tunlichst auch wissen was er da macht!

Hallo,

warum unvollständig, in Beitrag #1 ist doch der komplette Code. :gruebel:

halinchen 8. Jun 2007 15:22

Re: Wiedermal Maushook
 
Zitat:

Zitat von SirThornberry
also wenn ich mir das Beispiel angucke bekomm ich Angst. :shock: Da wird doch nicht etwa in jeden gehookten Prozess noch ein Form mit gepackt? Leider ist das Projekt unvollständig so das man auch nicht sehen kann ob das Form auch in jedem Prozess instanziert wird mit Laden der dll. Wenn dem nicht so ist bekomme ich noch mehr angst weil dann in jedem Prozess eine Zugriffsverletzung vorprogrammiert ist.
Wer solche Dinge nutzt sollte tunlichst auch wissen was er da macht!

Falls du den Code meinst, den ich benutze:

Ähm,... Wieso DLL? Bei einem Journal-Hook ist der Hook doch in der Exe drin und wird nicht in jeden anderen Prozess geladen. Oder hab ich da was total falsch verstanden?

Zugriffsverletzungen hab ich bisher noch nicht gehabt.

[Wennfalschdannbitteberichtigen-Modus]
Und selbst wenn:Ein Journal-Hook geht nur in einer EXE, wofür ist der sonst gedacht?
[/Wennfalschdannbitteberichtigen-Modus]
Falls ich total auf den Schlauch stehe bin ich natürlich lernfähig. (D.h. das oben war in _keiner_ Hinsicht böse, abfällig oder sonstwas gemeint.)

Zitat:

Zitat von Delphi-Fan-Friedrichsdorf
Hallo halinchen,
wenn du das Fensterhandle unter der Maus willst brauchst du keine Maushook.
Ich benutze Delphi 5 und mach das so:

So hatte ich es bisher auch. Aber 1. brauch ich den Hook noch für was anderes und 2. Ist es doch so besser, da es sofort angezeigt wird.

SirThornberry 8. Jun 2007 15:56

Re: Wiedermal Maushook
 
hmm, jetzt bin ich verwirrt - Auszug aus der Hilfe:
Zitat:

The JournalRecordProc hook procedure is an application-defined or library-defined callback function
Naja, hab ich auch mal was dazu gelernt, ich hatte anfangs doch Angst was da abgeht.
Allerdings sollte man dann mit SetWindowsHookEx auch angeben das die Funktion nur im aktuellen Thread ist. (sollte ja dann immer noch funktionieren und man fährt kein Risiko das es nach einem Windows-Update nicht mehr funktioniert)

halinchen 8. Jun 2007 16:01

Re: Wiedermal Maushook
 
Zitat:

Zitat von SirThornberry
Allerdings sollte man dann mit SetWindowsHookEx auch angeben das die Funktion nur im aktuellen Thread ist.

Ich schätze du meinst als letzten Parameter GetCurrentThread (oder GetCurrentThreadID) zu nehmen.
Ich teste das sofort mal. Aber logischerweise sollte der Hook dann nicht mehr global funktionieren...

[edit]
Delphi-Quellcode:
JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, hInstance, GetCurrentThread);
oder
Delphi-Quellcode:
JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, hInstance, GetCurrentThreadID);
So funktioniert der Hook überhaupt nicht mehr.
[/edit]

stoxx 9. Jun 2007 10:11

Re: Wiedermal Maushook
 
mal noch eine andere Bemerkung, unter Vista funktioniert der Hook nicht mehr.
Soll das so sein, oder gibts da eine anderen Lösung.
Sind diese und andere Hooks jetzt generell abgeschafft worden?
WH_Mouse geht nämlich auch nicht mehr ... hmm

Coder1990 29. Jul 2008 12:34

Re: Wiedermal Maushook
 
Hi

habe das selbe Problem wie Halinchen hatte bzw. vll heute noch hat.

Delphi-Quellcode:
FMouseHook := SetWindowsHookEx(WH_JOURNALRECORD, @TFMain.JournalProc, hInstance, 0);
verursacht Freeze...
warum?

MfG

The Riddler 9. Nov 2008 18:38

Re: Wiedermal Maushook
 
Zitat:

Zitat von stoxx
mal noch eine andere Bemerkung, unter Vista funktioniert der Hook nicht mehr.
Soll das so sein, oder gibts da eine anderen Lösung.
Sind diese und andere Hooks jetzt generell abgeschafft worden?
WH_Mouse geht nämlich auch nicht mehr ... hmm

Ich greife die Frage mal auf. Ich suche für meine Anwendung eine Möglichkeit auf Maustasten zu reagieren, bräuchte also einen Mouse-Hook für WinXP und Vista. Gibt es da noch nichts? :-(


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:31 Uhr.
Seite 2 von 2     12   

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