Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi WM_WINDOWPOSCHANGING abfangen (https://www.delphipraxis.net/52603-wm_windowposchanging-abfangen.html)

MisterNiceGuy 31. Aug 2005 11:38


WM_WINDOWPOSCHANGING abfangen
 
Hi, der Titel sagt eigentlich schon alles. Wie kann ich WM_WINDOWPOSCHANGING des aktuellen Fensters abfangen?

Vielen Dank schonma :)

SirThornberry 31. Aug 2005 11:42

Re: WM_WINDOWPOSCHANGING abfangen
 
in dem du einen messagehandler dafür schreibst
Delphi-Quellcode:
  private
    procedure FWindowPosChanging(var AMsg: TMessage); message WM_WINDOWPOSCHANGING;
[...]
procedure TForm1.FWindowPosChanging(var AMsg: TMessage);
begin
  //Hier dein Source der was machen soll wenn die Message einfliegt
end;

MisterNiceGuy 31. Aug 2005 11:44

Re: WM_WINDOWPOSCHANGING abfangen
 
Hmh das habe ich schon rausbekommen, aber mein Problem ist, dass ich WM_WINDOWPOSCHANGING von ALLEN Fenstern abfangen will, nicht nur die von meinem Programm.

SirThornberry 31. Aug 2005 11:45

Re: WM_WINDOWPOSCHANGING abfangen
 
dann musst du dir einen messagehook schreiben

MisterNiceGuy 31. Aug 2005 11:46

Re: WM_WINDOWPOSCHANGING abfangen
 
brauch ich dafür ne extra dll? Haste vielleicht einen Link mit einer Anleitung dazu?
Is nämlich mein erstes mal :mrgreen:

SirThornberry 31. Aug 2005 11:56

Re: WM_WINDOWPOSCHANGING abfangen
 
such mal im msdn nach SetWindowsHookEx (bzw. in der Delphihilfe)
MSDN-Library durchsuchenSetWindowsHookEx

Um eine DLL kommst du da wohl nicht herum (steht aber noch genaueres im msdn).

MisterNiceGuy 31. Aug 2005 13:17

Re: WM_WINDOWPOSCHANGING abfangen
 
Ich verstehe das ganze leider nicht so recht... Auch Assabads Hook Tutorial bringt mich nicht recht weiter. Gibt es denn nicht irgendwo eine Anleitung wie man Messages abfängt und verändert etc.?

Flocke 31. Aug 2005 13:28

Re: WM_WINDOWPOSCHANGING abfangen
 
Ungefähr so:
Delphi-Quellcode:
var
  HookHandle: Cardinal;

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

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

...
begin
  HookHandle := SetWindowsHookEx(WH_GETMESSAGE, GetmsgProc, hInstance, 0);
end;
[Nachtrag]

DLL kannst du dir sparen wenn's nur um dieselbe Anwendung geht.

[Noch'n Nachtrag]

Mit der Funktion
Delphi-Quellcode:
function FindControl(Handle: HWnd): TWinControl;
aus der Unit Controls kriegst du dann zu dem Fensterhandle das Control/die Form (falls vorhanden).

MisterNiceGuy 31. Aug 2005 13:47

Re: WM_WINDOWPOSCHANGING abfangen
 
Ne es geht ja NICHT um die gleiche Anwendung :) Ich will auch die Messages anderer Fenster abfangen ;)

Flocke 31. Aug 2005 13:53

Re: WM_WINDOWPOSCHANGING abfangen
 
Dann musst du den Code in eine DLL packen.

Alternativ zu WH_GETMESSAGE kannst du dir auch mal den Hook WH_CBT ansehen, da gibt's dann vielleicht nicht so viel Message-Traffic.

DLL erstellen geht eigentlich ganz einfach - mach einfach ein neues Projekt mit dem "DLL-Experten". Den Code trägst du dann komplett direkt in die Projektdatei ein, ähnlich wie bei einer Konsolenanwendung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:56 Uhr.
Seite 1 von 2  1 2      

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