![]() |
Prozess starten mit CreateProcess?
Hallo,
Ich beschäftige mich soeben mit der CreateProcess Funktion. So habe ich im Thread mit dem Titel ![]() Wenn ich einen Server starten will, der als Windows GUI Programm konzipert ist, hat dieser Prozess ja ein Fensterhandle. Den finde ich später auch mit FindWindow(). Meine Frage hier ist die folgende: Ich will nämlich den Prozess, den ich mit der Funktion starte nicht sehen. Dieser soll nur als Icon in der Windows Taskleiste rechts unten erscheinen. Nun enthält aber StartupInfo.dwFlags das Flag "STARTF_USESHOWWINDOW". Was bewirkt das? Aus der MSDN Doku werd ich da nicht so recht schlau. Mit Startupinfo.wShowWindow lege ich doch erst fest, wie das Fenster später angezeigt wird. Weiterhin verstehe ich das Flag STARTF_FORCEONFEEDBACK nicht! Wozu brauche ich, wenn ich ein Fensterorientiertes Programm starte die Console?
Delphi-Quellcode:
Ich habe ein kleines Testprogramm gebaut, welches mittels dieser Funktion einen Serverprozess startet. Funktioniert so, wie ich es haben will. Der Serverprozess wird gestartet und ich ich kann vom Client aus mit ihm kommunizieren. Genau wie ich es haben will. Für den Parameter "wait" hab ich narürlich den Wert false gesetzt, denn ich will ja den Client starten, der mit dem von ihm gestarteten Server kommuniziert.
function RunProcess(FileName: string; ShowCmd: DWORD; wait: Boolean; ProcID: PCardinal): Longword;
var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin FillChar(StartupInfo, SizeOf(StartupInfo), #0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK; StartupInfo.wShowWindow := ShowCmd; if not CreateProcess(nil, @Filename[1], nil, nil, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then Result := WAIT_FAILED else begin try if not wait then begin if ProcID <> nil then ProcID^ := ProcessInfo.dwProcessId; Result := S_OK; exit; end; WaitForSingleObject(ProcessInfo.hProcess, INFINITE); GetExitCodeProcess(ProcessInfo.hProcess, Result); finally CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); end; end; end; Aber ich verstehe die Bedeutung einiger Flags hier nicht vollständig, weshalb ich diesen Thread hier eröffnet habe. Will nicht nur Quellen übernehmen, die ich dann nicht richtig verstehe, sondern im Verständnis vorwärts kommen. Das Flag STARTF_FORCEONFEDDBACK suggeriert mir, das die Funktion auf ein Feedback warten soll, was ich aber nicht erhalte. Das ist bei meiner momentanen Absicht richtig, aber so wie ich das mit dem Feedback verstanden habe, müsste es doch dann STARTF_FORCENOFEEDBACK heißen? wo liegt da mein Denkfehler? Was bedeutet die Konstante INFINITE in der folgenden Funktion?: WaitForSingleObject(ProcessInfo.hProcess, INFINITE); Das sind erst mal alle offenen Fragen, ich hoffe, mir kann jemand antworten. |
Re: Prozess starten mit CreateProcess?
Zitat:
|
Re: Prozess starten mit CreateProcess?
Zitat:
|
Re: Prozess starten mit CreateProcess?
Ja, dann mach das doch erstmal. Dann übergibst du der Exe einen Schalter als Parameter, der das Programm minimiert startet.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 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-2025 by Thomas Breitkreuz