Entwickler-Ecke

Windows API - Fremdes Fenster wird maximiert - Benachrichtigung?


Passi077 - Do 23.10.08 18:39
Titel: Fremdes Fenster wird maximiert - Benachrichtigung?
Hi,

gibt es eine Möglichkeit, benachrichtigt zu werden sobald ein fremdes Fenster maximiert wird? Habe das benötigte Fensterhandle, falls das hilft.. Pollen wäre zwar möglich, aber das sollte eher nicht die Lösung sein...

Hintergrund:
Ich möchte meinen Desktop in unterschiedliche Bereiche aufteilen. So dass ein nicht maximiertes Fenster, dass sich z.B. oben links befindet, beim Maximieren nicht auf die Gesamte Bildschirmgröße expandiert wird, sondern nur auf einen festgelegten Bereich, z.B. 1/4 des Bildschirms oben links...
Unter XP geht das einigermaßen gut mit Hilfe von nVidia nView, leider läuft das aber nicht unter Vista :(

Würde mich freuen, wenn Ihr eine (oder gleich mehrere ;) ) Ideen habt!

Viele Grüße
Pascal


Passi077 - Fr 24.10.08 16:54

Bin inzwischen soweit, dass ich mir folgenden Windows-Hook geschrieben hab:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
type 
tag = record 
    LPARAM :lParam; 
    WPARAM :wParam; 
    message:Cardinal; 
    HWND   :hwnd; 
end

PMsg = ^Tag; 

const 
  WM_WND_MAX_MESSAGE = WM_APP + 0

function wndmsgHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall
begin 
  case nCode < 0 of 
    FALSE: 
      begin 
       if (PMsg(lparam).wparam = SC_Maximize) then 
        begin 
           SendMessage(WindowHandle,WM_WND_MAX_MESSAGE,0,0); 
        end
      end
  end
  Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); 
end;


Das funktioniert soweit auch. Damit benachrichtige ich meine Anwendung immer dann, wenn ein Fenster maximiert wird.

Jetzt würde ich aber gerne die Originalnachricht an das Zielfenster verwerfen und das Maximieren manuell vornehmen.. weiß jemand, wie das geht :)?


Marc. - Fr 24.10.08 17:04

[url=http://www.delphipraxis.net/topic144946_windows+hook+nachricht+manipulieren+verwerfen.html]Crosspost[/url]. Nächste Mal bitte direkt im ersten Post kenntlich machen.