AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Prozess starten mit CreateProcess?
Thema durchsuchen
Ansicht
Themen-Optionen

Prozess starten mit CreateProcess?

Offene Frage von "schöni"
Ein Thema von schöni · begonnen am 13. Feb 2010 · letzter Beitrag vom 13. Feb 2010
Antwort Antwort
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#1

Prozess starten mit CreateProcess?

  Alt 13. Feb 2010, 21:58
Hallo,

Ich beschäftige mich soeben mit der CreateProcess Funktion. So habe ich im Thread mit dem Titel

Programm starten ohne ShellExecute die unten stehende Funktion gefunden. Leider kann ich im genannten Thread keine Fragen posten, mach das deshalb hier.

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:
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;
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.

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.
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Prozess starten mit CreateProcess?

  Alt 13. Feb 2010, 22:09
Zitat von schöni:
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.
Bietet dies Programm denn diese Funktionalität?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#3

Re: Prozess starten mit CreateProcess?

  Alt 13. Feb 2010, 22:27
Zitat von Luckie:
Zitat von schöni:
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.
Bietet dies Programm denn diese Funktionalität?
Wenn ich im Serverprozess alle beabsichtigten Funktionen implementiert haben werde, ja!
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Prozess starten mit CreateProcess?

  Alt 13. Feb 2010, 22:35
Ja, dann mach das doch erstmal. Dann übergibst du der Exe einen Schalter als Parameter, der das Programm minimiert startet.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz