| Autor |
Beitrag |
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Do 10.09.09 15:51
Hi,
ich muß ein programm via Command line starten, der aufruf dafür sieht so aus:
start "theProgram" /wait c:\theProgram\theProgram.exe -s -t
es muß leider zwingend via start mit /wait aufgerufen werden, wenn ich es nur so aufrufe:
c:\theProgram\theProgram.exe -s -t
komme ich sofort wieder in die commando zeile zurück, obwohl das programm noch arbeitet.. bei start /wait komme ich erst dann wieder zurück wenn das Programm wirklich fertig ist.
So, das problem ist jetzt.. im moment starte ich das einfach via System("start ...");
Das klappt auch, aber ich möchte gern das Fenster welches aufgeht von dem fremden programm verstecken.. aber das geht bei System() nicht.
Hat irgendwer eine idee wie ichdas mit ShellExecute oder CreateProcess hinbekomme?
Aya~
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Do 10.09.09 15:58
Delphi-Quelltext 1:
| RunConsoleApp("start "theProgram" /wait c:\theProgram\theProgram.exe -s -t"); |
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
Aya 
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Do 10.09.09 16:02
platzwart hat folgendes geschrieben : | Delphi-Quelltext 1:
| RunConsoleApp("start "theProgram" /wait c:\theProgram\theProgram.exe -s -t"); | |
Öhm.... mal davon abgesehen das ich zu dem befehl nichts finde bei google, wo soll ich da das erreichen können das das Fenster nicht angezeigt wird? Etwas á la SW_HIDE sehe ich da nicht.
Aya
PS: Ich nutze btw C++, nicht Delphi.
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Do 10.09.09 16:06
theprogram.exe -s -t nennt sich sicher auch shutdown.exe o. ? ^^
|
|
Aya 
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Do 10.09.09 16:11
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Do 10.09.09 16:13
Sorry, war für Delphi und läuft im Hintergrund...
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 10.09.09 22:17
thepaine91 hat folgendes geschrieben : | | theprogram.exe -s -t nennt sich sicher auch shutdown.exe o. ? ^^ |
Das ist Aya, und der ist bestimmt kein Scriptkiddy.
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Fr 11.09.09 08:59
Luckie hab ich mit keinem Wort gesagt wenn das so rüber kam sorry Aya.
Durch dein Beispiel sah es nur einfach danach aus. 
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 11.09.09 09:36
start /wait macht doch vermutlich nicht viel anderes als diese Quelltexte:
www.delphi-library.d...ewtopic.php?p=470058
www.delphipraxis.net...st722533.html#722533
Ich vermute, dass du dann das damit ganz normal aufrufen kannst, oder?
|
|
Lossy eX
      
Beiträge: 1048
Erhaltene Danke: 4
|
Verfasst: Fr 11.09.09 10:03
Also eines finde ich etwas verwirrend. Hast du da jetzt so was wie eine Batch oder ist das Bestandteil eines Programmes von dir?
Wenn du das aus deinem Programm herraus startest, dann kannst du CreateProcess benutzen und die Anwendung direkt starten. Ohne Umweg über Start. Zum Warten musst du dann nur das ProcessHandle an WaitForObject übergeben. Dann hättest du auch noch die Möglichkeit, dass deine Anwendung nach wie vor noch erreichbar bliebe. Bzw dass du im Falle des Falles die andere Anwendung dann noch abschießen könntest.
Außerdem könntest du mit CreateProcess einen ShowMode angeben. An CreateProcess muss ein StartupInfo übergeben werden. In diesem Info gibt es ein Feld wShowWindow. Dieses enthält einen ShowMode. Der wird aber nur benutzt, wenn STARTF_USESHOWWINDOW in dwFlags enthalten ist. ABER. Ob das jetzt die Lösung aller Probleme ist, lasse ich mal dahingestellt. Denn das sorgt nur dafür dass der erste Aufruf von ShowWindow ignoriert wird und anstelle dessen der übergebene Modus benutzt wird. Ein mehrfaches Aufrufen oder ein zweit oder drittfenster würden nicht beeinflusst werden. Calc ignoriert zum Beispiel das ShowWindow wärend notepad (u. ++) das nicht tut.
Hier mal ein Beispiel. Und ja ich weiß, dass das pascal ist.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin FillChar(StartupInfo, SizeOf(StartupInfo), 0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := SW_HIDE;
if not CreateProcess('C:\WINDOWS\system32\notepad.exe', nil, nil, nil, True, 0, nil, nil, StartupInfo, ProcessInfo) then RaiseLastOSError;
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); end; |
[edit] Argh ein bisschen langsam. Aber gibt sich vom prinzip her nichts.
_________________ Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
|
|
Aya 
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Fr 11.09.09 11:31
Hi,
danke euch - das mit waitForSingleObject war die Lösung
Danke~
Aya
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|