| Zitat: |
|
Thema: Starten von Anwendungen und auf deren Ende warten Wer nicht nur eine andere Anwendung starten will, sondern auch noch warten, bis diese ihre Abarbeitung beendet hat, muß etwas tiefer in die Trickkiste greifen. Eine relativ einfache (und unter 16 Bit die einzige) Möglichkeit besteht darin, das von WinExec zurückgelieferte Instanzenhandle zu nutzen, um die Anzahl der Nutzungen zu zählen und daruaf zu warten, daß diese Anzahl 0 wird. Beispiel: Function WinExecAndWait(Path : string; Visibility : word) : word; var InstanceID : THandle; PathLen : integer; begin PathLen := Length(Path); Move(Path[1],Path[0],PathLen); Path[PathLen] := #00; { Try to run the application } InstanceID := WinExec(@Path,Visibility); if InstanceID > 32 then { Wert kleiner 32 ist ein Fehler } WinExecAndWait := InstanceID else begin Repeat Application.ProcessMessages; until Application.Terminated or (GetModuleUsage(InstanceID) = 0); WinExecAndWait := 32; end; end; Für 32Bit-Anwendungen ist ein anderer Weg empfehlenswerter: die Funktionen CreateProcess, WaitforSingleObject und GetExitCodeProcess. Beispiel: function WinExecAndWait(FileName:String; Visibility : integer):integer; var zAppName : array[0..512] of char; zCurDir : array[0..255] of char; WorkDir : String; StartupInfo : TStartupInfo; ProcessInfo : TProcessInformation; begin StrPCopy(zAppName,FileName); GetDir(0,WorkDir); StrPCopy(zCurDir,WorkDir); FillChar(StartupInfo,Sizeof(StartupInfo),#0); StartupInfo.cb := Sizeof(StartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := Visibility; if not CreateProcess(nil, zAppName, { Kommandozeile } nil, { Zeiger auf Sicherheitsattribute Prozess } nil, { Zeiger auf Sicherheitsattribute Thread } false, { Behandlung Flag inheritance } CREATE_NEW_CONSOLE or { Create-Flags } NORMAL_PRIORITY_CLASS, nil, { Zeiger auf Environment-Block } nil, { Zeiger auf aktuelles Verzeichnis } StartupInfo, { Startinformationen } ProcessInfo) then Result := -1 { Prozessinformationen } else begin WaitforSingleObject(ProcessInfo.hProcess,INFINITE); GetExitCodeProcess(ProcessInfo.hProcess,Result); end; end; |
| check_it_now hat folgendes geschrieben: |
| macht mich doch mal schlau was mein problem ist. |
1: | PDWORD |
1: | type |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!