AGB  ·  Datenschutz  ·  Impressum  







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

CreateProcess mit Parameterübergabe?

Ein Thema von emsländer · begonnen am 22. Feb 2006 · letzter Beitrag vom 23. Feb 2006
Antwort Antwort
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#1

CreateProcess mit Parameterübergabe?

  Alt 22. Feb 2006, 20:29
Moin,

ich greife mal die Funktion runprocess aus der Code Library auf:

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
    if wait = FALSE then
    begin
      if ProcID <> nil then ProcID^ := ProcessInfo.dwProcessId;
      exit;
    end;
    WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    GetExitCodeProcess(ProcessInfo.hProcess, Result);
  end;
  if ProcessInfo.hProcess <> 0 then
    CloseHandle(ProcessInfo.hProcess);
  if ProcessInfo.hThread <> 0 then
    CloseHandle(ProcessInfo.hThread);
end;
Aufgerufen durch:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  ProcID: Cardinal;
begin
  if OpenDialog1.Execute then
    RunProcess(OpenDialog1.FileName, SW_MINIMIZE, TRUE, ProcID);
  Messagebox(0, 'fertig', @OpenDialog1.Filename[1], 0);
end;
Wie kann man hier noch (2) Parameter übergeben?


Gruss

EL


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: CreateProcess mit Parameterübergabe?

  Alt 22. Feb 2006, 20:37
CreateProcess bekommt die Kommandozeile als 2. Parameter, also:
Delphi-Quellcode:
...
  if not CreateProcess(nil,
    @Filename[1],
    nil, // <-- HIER
    nil,
    False,
...
Du musst also die Funktion erweitern.

Bedenke allerdings, dass es sich um die komplette Kommandozeile handeln sollte, also inkl. Filename (im Grunde so, wie man es auf der Kommandozeile hinschreiben würde).
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#3

Re: CreateProcess mit Parameterübergabe?

  Alt 22. Feb 2006, 21:28
Zitat von Flocke:
CreateProcess bekommt die Kommandozeile als 2. Parameter, also:
Delphi-Quellcode:
...
  if not CreateProcess(nil,
    @Filename[1],
    nil, // <-- HIER
    nil,
    False,
...
Du musst also die Funktion erweitern.

Bedenke allerdings, dass es sich um die komplette Kommandozeile handeln sollte, also inkl. Filename (im Grunde so, wie man es auf der Kommandozeile hinschreiben würde).
wenn ich dort, wo Du hinschreibst, erweitere, wird das nix. Bekomme nur den Fehler: inkompatible Typen - String und SecurityAttribute ...


Gruss

EL


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

Re: CreateProcess mit Parameterübergabe?

  Alt 22. Feb 2006, 22:53
MSDN-Library durchsuchenCreateProcess

Code:
BOOL [b]CreateProcess[/b][b]([/b]
    [color=#ff0000]LPCTSTR lpApplicationName[/color], [color=#00A000]// pointer to name of executable module[/color]
    [color=#ff0000]LPTSTR lpCommandLine[/color], [color=#00A000]// pointer to command line string[/color]
    LPSECURITY_ATTRIBUTES lpProcessAttributes, [color=#00A000]// pointer to process security attributes[/color]
    LPSECURITY_ATTRIBUTES lpThreadAttributes, [color=#00A000]// pointer to thread security attributes[/color]
    BOOL bInheritHandles, [color=#00A000]// handle inheritance flag[/color]
    DWORD dwCreationFlags, [color=#00A000]// creation flags[/color]
    LPVOID lpEnvironment, [color=#00A000]// pointer to new environment block[/color]
    LPCTSTR lpCurrentDirectory, [color=#00A000]// pointer to current directory name[/color]
    LPSTARTUPINFO lpStartupInfo, [color=#00A000]// pointer to STARTUPINFO[/color]
    LPPROCESS_INFORMATION lpProcessInformation [color=#00A000]// pointer to PROCESS_INFORMATION[/color]
   [b])[/b];
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: CreateProcess mit Parameterübergabe?

  Alt 23. Feb 2006, 06:31
Zitat von emsländer:
wenn ich dort, wo Du hinschreibst, erweitere, wird das nix. Bekomme nur den Fehler: inkompatible Typen - String und SecurityAttribute ...


Gruss

EL
Sorry, nicht richtig gelesen.

In diesem Fall kannst du einfach die komplette Kommandozeile als "FileName" angeben, also einfach die Parameter nach einem Leerzeichen an die Echse dranhängen. Aber: wenn im Pfad Leerzeichen sind, dann musst du den Dateinamen in doppelte Anführungszeichen setzen.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  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 03:01 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