Oh, sorry! Also: Ich brauchte dies für einen eigenen Desktop: Klickt jetzt ein User auf ein Programm wird dann mittels Msg die ProzessID des eben gestarteten Programms per Nachricht an den "Desktop" geschickt. Dieser führt unter anderem folgende Prozedur aus:
Delphi-Quellcode:
{Kurze Pause um das externe Programm zu laden}
li1:= GetTickCount;
repeat
Application.ProcessMessages;
until ((GetTickCount-li1) >= Longint(100));
ready:= false;
while not ready do begin
EnumWindows(@EnumWindowsProc, msg.WParam);
if not ready then begin
{Falls das Programm immer noch nicht gestartet hat...
nochmals Pause}
li1:= GetTickCount;
repeat
Application.ProcessMessages;
until ((GetTickCount-li1) >= Longint(100));
end;
end;
Somit umgeh ich praktisch das Problem, dass das externe Programm noch nicht geladen hat. Denn ohne der Pausenfunktion würde sich die Schleife zu schnell wiederholen und somit den Pc für das erstellen der neuen Formular des externen Programms blockieren.
Per EnumWindows die Fenster aufschlüsseln.
Damit Windows einen Taskbar Button für ein Fenster erstellt, muss dieses folgende Grundstrukturen aufweisen:
+ muss ein Fenster sein (IsWindow)
+ muss sichtbar sein (IsWindowVisible)
+ darf keinen Besitzer haben (GetWindow(
handle, GW_Owner)
+ darf keine Eltern haben (GetParent(
handle))
Hauptsächlich gilt dies für die Hauptformulare eines Prozesses. Ein
Handle auf diese bekommt man per EnumWindows - Problem: es ist nicht leicht herauszufinden, ob das
Handle zu einem Hauptfenster oder zu einem ChildWindow, usw. gehört. Weiters ist es bei einem unter Delphi erstellten Programm so, dass die Application das Hauptformular ist. Man sollte allerdings diese nie maximieren - führt zu unschönen effekten. Deshalb hab ich mich dafür entschieden nur Maximieren und Wiederherstellen einzubauen und dies funktioniert problemlos auch mit dem
Handle der Applikation, da per
Delphi-Quellcode:
if IsIconic(PrgHandle) then begin
ShowWindow(PrgHandle, SW_Restore);
BringWindowToTop(PrgHandle);
end
else
ShowWindow(PrgHandle, SW_MINIMIZE);
end
sozusagen das Hauptformuler (bei Delphi eben TApplication) wiederhergestellt wird. Und Wiederherstellen ist nichts anderes als das Programm in seinen Startzustand zurückversetzen.