Guten Morgen,
ich habe mich jetzt mal mit Deinen Vorschlägen auseinander gesetzt und folgendes probiert:
Delphi-Quellcode:
Type
TEnumData = Record
hW: HWND;
pID: DWORD;
End;
Function EnumProc( hw: HWND; Var data: TEnumData ): Bool; stdcall;
Var
pID: DWORD;
Begin
Result := True;
If (GetWindowLong(hw, GWL_HWNDPARENT) = 0) and
(IsWindowVisible( hw ) or IsIconic(hw)) and
((GetWindowLong(hw, GWL_EXSTYLE) and WS_EX_APPWINDOW) <> 0)
Then Begin
GetWindowThreadProcessID( hw, @pID );
If pID = data.pID Then Begin
data.hW := hW;
Result := False;
End; { If }
End; { If }
End; { EnumProc }
Function WindowFromProcessID( pID: DWORD ): HWND;
Var
data: TEnumData;
Begin
data.pID := pID;
data.hW := 0;
EnumWindows( @EnumProc, longint(@data) );
Result := data.hW;
End;
Jetzt will ich prüfen, ob das Fenster vorhanden ist:
Delphi-Quellcode:
if (WindowFromProcessID(cMod) <> 0) then
begin
ShowWindow(WindowFromProcessID(cMod), SW_NORMAL);
SetForegroundWindow(WindowFromProcessID(cMod));
end
else begin
cMod := ExecAndWait(ExtractFilePath(Application.ExeName)+'\mod\newapp.exe', '', SW_SHOWNORMAL, False);
end;
Allerdings gibt mir die Funktion "WindowFromProcessID" immer 0 zurück. Mach ich da einen Denkfehler?