Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm ausführen und warten bis es beendet wurde (https://www.delphipraxis.net/120223-programm-ausfuehren-und-warten-bis-es-beendet-wurde.html)

melodie 7. Sep 2008 10:56


Programm ausführen und warten bis es beendet wurde
 
Ich habe schon herausgefunden, wie ich soetwas anstelle, aber das will bei keinem Beispiel klappen.

Mein Code:
Delphi-Quellcode:
procedure ShellExecAndWait(dateiname: string; Parameter: string);
var executeInfo: TShellExecuteInfo;
dw: DWORD;
begin
FillChar(executeInfo, SizeOf(executeInfo), 0);
with executeInfo do
begin
        cbSize := SizeOf(executeInfo);
        fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
        Wnd := GetActiveWindow();
        executeInfo.lpVerb := 'open';
        executeInfo.lpParameters := PChar(Parameter);
        lpFile := PChar(dateiname);
        nShow := SW_SHOWMAXIMIZED;
end;
if ShellExecuteEx(@executeInfo) then
        dw := executeInfo.HProcess
else
begin
        ShowMessage('Fehler: ' + SysErrorMessage(GetLastError));
        Exit;
end;
while WaitForSingleObject(executeInfo.hProcess, 50) <> WAIT_OBJECT_0 do
        Application.ProcessMessages;
CloseHandle(dw);
end;

//Hier wird die Funktion aufgerufen und erst wenn das Programm beendet wurde sollen die Befehle danach ausgeführt werden
procedure TForm1.Image3Click(Sender: TObject);
begin
  FormStyle := fsNormal;
  ShellExecAndWait(config.Strings[0], '');
  FormStyle := fsStayOnTop;
  SetFocus;
end;
Ich hoffe es ist verständlich geschildert.

DeddyH 7. Sep 2008 11:00

Re: Programm ausführen und warten bis es beendet wurde
 
Hast Du es alternativ mal mit Ollis Variante versucht?

melodie 7. Sep 2008 11:29

Re: Programm ausführen und warten bis es beendet wurde
 
Die Version klappt auch nicht.

Ich habe einfach die verlinkte Unit eingebunden und folgendes in meinem Code geändert:
Delphi-Quellcode:
procedure TForm1.Image3Click(Sender: TObject);
begin
  FormStyle := fsNormal;
  ShellExecuteAndWait(Application.Handle, 'open', PChar(config.Strings[0]), nil, PChar(ExtractFileDir(config.Strings[0])), 0, False);
  FormStyle := fsStayOnTop;
  SetFocus;
end;
Es passiert genau dasselbe wie bei meinen zahlreichen anderen Versuchen: Das Programm öffnet sich und, egal ob ich etwas in dem Programm mache oder nicht, nach ca. 5 sek. kommt wieder mein Programm in den Vordergrund.

RaSoWa1 7. Sep 2008 12:21

Re: Programm ausführen und warten bis es beendet wurde
 
Hallo,
mal in Tip in eine andere Richtung.

Ich hatte mal das gleiche Problem. Habe ewig Codes gesucht und getestet. Ohne Erfolg. Bis ich festgestellt habe, das es an dem aufgerufenem Programm lag.
Das Programm war das "Ulead PhotoImpact 12\Iedit.exe". Diese EXE hatte nur den Startbilschirm angezeigt und dann die "Iedit_.exe" (das eigentliche Programm) gestartet.
Nachdem ich die Iedit_.exe aufrufe, funktioniert es wie gewollt, aber ohne den Startbilschirm. Geht dadurch sogar etwas schneller.

Gruß
Klaus

DeddyH 7. Sep 2008 12:47

Re: Programm ausführen und warten bis es beendet wurde
 
Auf sowas würde ich auch nicht kommen :lol:

melodie 7. Sep 2008 13:07

Re: Programm ausführen und warten bis es beendet wurde
 
Komisch. Mit einem anderen Programm geht es auf einmal.
Wobei ich 5 sek. warten muss bis nach Beendigung des Programms, wieder mein Form auftaucht.

Ich habe vorher swriter.exe von OpenOffice aufgerufen. Weiß jemand was daran problematisch seien könnte?

[edit]
Genau das Problem, das von RaSoWa1 beschrieben wurde.
Aus swriter.exe wird soffice.exe.
Vielen Dank für den Tipp!
[/edit]

[edit2]
Doch nicht!
Mein Programm schiebt sich trotzdem nach 5sek in den Vordergrund. Obwohl ich soffice.exe aufgerufen habe.
[/edit2]


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz