Ich habe dazu ein kurzes Beispiel "heruntergeschlumpert" (d.h. ohne Gewähr, PID ist ein privates DWORD-Feld des Formulars):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
ZeroMemory(@StartupInfo,SizeOf(StartupInfo));
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := SW_SHOW;
if CreateProcess(nil, 'calc.exe', nil, nil, false, CREATE_NEW_CONSOLE or
NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then
try
PID := ProcessInfo.dwProcessId;
finally
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
end;
end;
function EnumWindowsProc(Wnd: HWnd; aPID: DWORD): BOOL; stdcall;
var hProcess: DWORD;
begin
GetWindowThreadProcessID(Wnd,hProcess);
Result := hProcess <> aPID;
if not Result then
SetForegroundWindow(Wnd);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if PID <> 0 then
EnumWindows(@EnumWindowsProc,PID);
end;
[edit] Wobei das zu Problemen führen kann, wenn der Prozess mehrere Fenster geöffnet hat, da ich einfach das zuerst gefundene nach vorn hole und dann aus der Schleife austrete. Vermutlich gibt es einen Weg, das MainForm zu ermitteln, leider kenne ich ihn nicht
[/edit]