Fremde Anwendung maximieren,
minimiert und wiederherstellen
Möchte man eine fremde Anwendung
in den Vordergrund bringen, so lässt sich dies wie folgt bewerkstelligen.
Zunächst benötigt man den Handle der Anwendung. Diesen bekommt
man beispielsweise über den Anwendungsnamen (nicht zwangsläufig
gleich mir dem EXE-Dateinamen). Um gezielter auswählen zu
können, kann man auch noch den Fenstertitel mit heranziehen. Im
Beispiel wird die minimierte Anwendung Notepad aus der Versenke
geholt (wiederhergestellt), da hier das gerade geöffnete
Dokument als Fenstertitel herangezogen wird, solle man auf die
Angabe verzichten und stattdessen
nil einsetzen.
| |
var
wnd:
HWND;
.
.
wnd := FindWindow('Notepad',nil);
SendMessage(wnd, WM_SYSCOMMAND, SC_RESTORE,
0);
SetForegroundWindow(wnd) // um
letztlich das Fenster auch aktiv zu setzen. Siehe auch
SetForegroundWindowEx weiter unten |
Maximieren: SC_MAXIMIZE
Minimieren: SC_MINIMIZE

Anwendung in den Vordergrund bringen mit SetForegroundWindowEx :
ab Windows Me (98?) wird
SetForegroundWindow das Fenster leider nicht mehr in den
Vordergrund bringen, solange der Focus auf einer anderen
Anwendung liegt. Stattdessen beginnt die Anwendung in der
Taskleiste an orange zu blinken. Mit SetForegroundWindowEx wird
die Anwendung jedoch trotzdem in den Vordergrund katapultiert.
| |
procedure
SetForegroundWindowEx(Wnd: HWND);
var
Attached: Boolean;
ThreadId: DWORD;
FgWindow: HWND;
AttachTo: DWORD;
begin
Attached := False;
ThreadId := GetCurrentThreadId;
FgWindow := GetForegroundWindow();
AttachTo :=
GetWindowThreadProcessId(FgWindow, nil);
if (AttachTo <>
0) and (AttachTo <> ThreadId)
then
if
AttachThreadInput(ThreadId, AttachTo, True)
then
begin
Attached :=
Windows.SetFocus(Wnd) <> 0;
AttachThreadInput(ThreadId, AttachTo, False);
end;
if
not Attached
then
begin
SetForegroundWindow(Wnd);
SetFocus(Wnd);
end;
end; //
von setforegroundWindowEx |
|
Quelle: http://www.delphipraxis.net |
Aufgerufen wird das
ganze mit:
| |
SetForegroundWindowEx(wnd); |
Wobei 'wnd' der Handle der
Anwendung ist, die in den Vordergrund gebracht werden soll. Eine
Möglichkeit ist den Handel über den Anwendungsnamen und dem
Fenstertitel zu bekommen,
mittels 'FindWindow'. Möchte man als Beispiel Windows Notepad in
den Vordergrund zaubern, so könnte das wie folgt aussehen:
| |
SetForegroundWindowEx(FindWindow('Notepad',nil)); |
Mehr zu Windows
Handle gibt es hier.

|