AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WM_WINDOWPOSCHANGING abfangen

Ein Thema von MisterNiceGuy · begonnen am 31. Aug 2005 · letzter Beitrag vom 1. Sep 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von MisterNiceGuy
MisterNiceGuy

Registriert seit: 1. Jul 2003
Ort: Mannheim
919 Beiträge
 
Delphi 7 Personal
 
#11

Re: WM_WINDOWPOSCHANGING abfangen

  Alt 31. Aug 2005, 15:02
öhhm welchen Code?
Jonas
Wenn mich jemand sucht, ich bin im Kühlschrank!

Informationen über das Duale Studium
www.jofre.de
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#12

Re: WM_WINDOWPOSCHANGING abfangen

  Alt 31. Aug 2005, 15:03
Den, welchen Volker geposted hat
  Mit Zitat antworten Zitat
Benutzerbild von MisterNiceGuy
MisterNiceGuy

Registriert seit: 1. Jul 2003
Ort: Mannheim
919 Beiträge
 
Delphi 7 Personal
 
#13

Re: WM_WINDOWPOSCHANGING abfangen

  Alt 31. Aug 2005, 15:32
Gute Idee
Jonas
Wenn mich jemand sucht, ich bin im Kühlschrank!

Informationen über das Duale Studium
www.jofre.de
  Mit Zitat antworten Zitat
Benutzerbild von MisterNiceGuy
MisterNiceGuy

Registriert seit: 1. Jul 2003
Ort: Mannheim
919 Beiträge
 
Delphi 7 Personal
 
#14

Re: WM_WINDOWPOSCHANGING abfangen

  Alt 31. Aug 2005, 17:49
Oh Gott ich bekomme es nicht hin!!! Fehlt da noch irgendwas wenn ich die Function samt Variable einfach in das Unitfenster der dll kopiere? Ich bekomm auf jedefall ne Fehlermeldung...
Jonas
Wenn mich jemand sucht, ich bin im Kühlschrank!

Informationen über das Duale Studium
www.jofre.de
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#15

Re: WM_WINDOWPOSCHANGING abfangen

  Alt 31. Aug 2005, 18:03
Etwa so sollte es aussehen (alles ungetestet).

Delphi-Quellcode:
library SuperMsgHook;

uses
  Windows,
  Messages,
  SysUtils,
  Classes;

type
  TMessageHookCallback = procedure(const Msg: Windows.TMsg) of object;

var
  HookHandle: Cardinal;
  CallbackProc: TMessageHookCallback;

function GetMsgProc(code: integer; wParam: WPARAM; lParam: LPARAM): LResult;
  stdcall;
begin
  if (code = HC_ACTION) and Assigned(CallbackProc) then
    if Windows.PMsg(lParam)^.message = WM_WINDOWPOSCHANGING then
      CallbackProc(Windows.PMsg(lParam)^);

  Result := CallNextHookEx(HookHandle, Code, wParam, lParam);
end;

procedure DisableMessageHook;
  stdcall;
begin
  CallbackProc := nil;

  if HookHandle <> 0 then
  begin
    UnhookWindowsHookEx(HookHandle);
    HookHandle := 0;
  end;
end;

procedure EnableMessageHook(ACallbackProc: TMessageHookCallback);
  stdcall;
begin
  DisableMessageHook;

  CallbackProc := ACallbackProc;
  HookHandle := SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, hInstance, 0);
  if HookHandle = 0 then
    RaiseLastOsError;
end;

exports
  GetMsgProc,
  EnableMessageHook,
  DisableMessageHook;

end.
... und dann in deinem Hauptprogramm:

Delphi-Quellcode:
type
  TMessageHookCallback = procedure(const Msg: Windows.TMsg) of object;

procedure DisableMessageHook; stdcall; external 'SuperMsgHook.dll';
procedure EnableMessageHook(ACallbackProc: TMessageHookCallback); stdcall; external 'SuperMsgHook.dll';
Du brauchst dann eine selbstgeschriebene Methode, die die Informationen entgegennimmt. Die übergibst du an "EnableMessageHook".
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von MisterNiceGuy
MisterNiceGuy

Registriert seit: 1. Jul 2003
Ort: Mannheim
919 Beiträge
 
Delphi 7 Personal
 
#16

Re: WM_WINDOWPOSCHANGING abfangen

  Alt 31. Aug 2005, 18:26
Vielen Dank für die Hilfe, ich hatte keine Uses drin...

Wie erstelle ich daraus nun eine Dll? Sie wird nicht automatisch generiert...

Edit: Ahh habs schon hinbekommen

Edit2: Waaa aber jetzt kann ich mit
Zitat:
Du brauchst dann eine selbstgeschriebene Methode, die die Informationen entgegennimmt. Die übergibst du an "EnableMessageHook".
nichts anfangen...
Jonas
Wenn mich jemand sucht, ich bin im Kühlschrank!

Informationen über das Duale Studium
www.jofre.de
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#17

Re: WM_WINDOWPOSCHANGING abfangen

  Alt 31. Aug 2005, 22:27
Als ob ich's gewusst hätte

Die DLL compiliert aber richtig, oder?

Dann weiter so in deinem Hauptprogramm:

Delphi-Quellcode:
// das hatten wir schon
type
  TMessageHookCallback = procedure(const Msg: Windows.TMsg) of object;

procedure DisableMessageHook; stdcall; external 'SuperMsgHook.dll';
procedure EnableMessageHook(ACallbackProc: TMessageHookCallback); stdcall; external 'SuperMsgHook.dll';

// Ab jetzt neu, Methode von Form1, also von deinem Hauptformular.
// Kann aber auch eine Methode einer beliebigen Klasse sein
procedure Form1.OnMessageHook(const Msg: Windows.TMsg);
begin
  // Hier stehen jetzt in Msg alle Parameter der Meldung
  // Msg.hwnd: HWND; das Fensterhandle
  // Msg.message: UINT; WM_WINDOWPOSCHANGING
  // Msg.wParam: WPARAM; wParam zu der Meldung
  // Msg.lParam: LPARAM; lParam zu der Meldung
  // Msg.time: DWORD; Zeitpunkt der Nachricht
  // Msg.pt: TPoint; Mauszeigerstelle zum ang. Zeitpunkt

end;

procedure Form1.FormShow(Sender: TObject);
begin
  // Hier wird der Hook eingeschaltet
  EnableMessageHook(OnMessageHook);
end;

procedure Form1.FormHide(Sender: TObject);
begin
  // ... und hier wieder ausgeschaltet
  DisableMessageHook;
end;
In OnMessageHook kannst du jetzt die Nachrichten verarbeiten. Du solltest allerdings nicht zu viel machen, da es sonst auf die Performance geht.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#18

Re: WM_WINDOWPOSCHANGING abfangen

  Alt 1. Sep 2005, 08:37
... wobei mir heute beim Aufwachen eingefallen ist, dass es so ggf. nicht funktioniert.

Die Hook-DLL wird ja per Injection in jeden Prozess eingeschleust, in einem anderen Prozess funktioniert aber der Methoden-Zeiger nicht
Oder wird nur ein Stub in den fremden Prozess geschrieben, der dann den Hook in meinem Prozesskontext aufruft
Ich habe heute leider keine Zeit mehr mich weiter damit zu befassen, poste mal ob's funktioniert - insbesondere ob's lokal (nur dein Prozess) oder global funktioniert.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von MisterNiceGuy
MisterNiceGuy

Registriert seit: 1. Jul 2003
Ort: Mannheim
919 Beiträge
 
Delphi 7 Personal
 
#19

Re: WM_WINDOWPOSCHANGING abfangen

  Alt 1. Sep 2005, 13:20
Hi es funktioniert leider NICHT Weder lokal noch global, die Procedure onMessageHook wird garnicht aufgerufen...
Jonas
Wenn mich jemand sucht, ich bin im Kühlschrank!

Informationen über das Duale Studium
www.jofre.de
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#20

Re: WM_WINDOWPOSCHANGING abfangen

  Alt 1. Sep 2005, 23:00
Ich hab's hier jetzt mal getestet - der Hook wird zwar aufgerufen, aber es kommt *NIE* WM_WINDOWPOSCHANGING an. Erschwerend kommt hinzu, dass nur die Meldungen der eigenen Anwendung abgefangen werden und nicht die systemweiten (die Ursache dafür wird wohl die sein, die ich beim letzten Mal beschrieben habe: unterschiedliche Prozesse, unterschiedliche Adressräume).

Ich habe gerade mal in Ollis Hook-Tutorial geschaut, von dem er schon ein paar Mal geschrieben hat. Er geht da ziemlich ausführlich auf die Inter-Prozess-Kommunikation bei global Hooks ein, um die du auch nicht herumkommen wirst. Also solltest du dir dieses Tutorial mal zu Gemüte führen.

[Nachtrag]

... und natürlich erst mal den Hook finden, mit dem du WM_WINDOWPOSCHANGING abfangen kannst.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 21:11 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