Einzelnen Beitrag anzeigen

NetSonic

Registriert seit: 10. Mai 2007
124 Beiträge
 
Delphi 10 Seattle Professional
 
#7

Re: Externes Programm starten, beenden, in den Vordergrund h

  Alt 19. Mär 2010, 08:43
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?
  Mit Zitat antworten Zitat