AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Erster Parameter geht verloren

Ein Thema von blablab · begonnen am 30. Aug 2011 · letzter Beitrag vom 30. Aug 2011
Antwort Antwort
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#1

Erster Parameter geht verloren

  Alt 30. Aug 2011, 14:57
Hallo!

Ich benutze folgenden Code:

Delphi-Quellcode:
      Result := CreateProcess(PChar(Programm), 'Halli hallo wie gehts denn so?'{PChar(CommandLine)}, nil, nil, true,
            CREATE_DEFAULT_ERROR_MODE, nil, PChar(ExtractFilePath(Programm)), StartupInfo, ProcessInfo);
Und ich rufe damit ein Programm aus, das einfach nur die Parameter anzeigt:

Delphi-Quellcode:
   for i := 0 to ParamCount do begin
      MemoParams.Lines.Add(ParamStr(i));
   end;
Und dabei geht immer der erste Parameter verloren. Das Programm zeigt also an:

-NameDerExe-
hallo
wie
gehts
denn
so?

Theoretisch kann ich als ersten Parameter ja einfach irgendeinen "Opfer-Wert" nehmen, der dann wegfällt. Aber ich hatte das Problem schon öfters und ich frage mich was dahinter steckt... Mache ich hier etwas falsch, oder gibts da einen Trick den ich nicht kenne?

Grüße
blablab
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#2

AW: Erster Parameter geht verloren

  Alt 30. Aug 2011, 15:09
Eigentlich steckt in MSDN-Library durchsuchenGetCommandLine folgendes drin EXEPath Param1 Param2 ... ,
wobei in EXEPath der eigentlich aufgerufene Pfad der ausgeführten EXE drinsteht.
(ruft man z.B. nur "MeinProgramm" über CMD auf, dann steht auch nur das dort drin)

Delphi-Referenz durchsuchenParamStr(0) ignoriert deshalb diesen Wert und gibt stattdessen MSDN-Library durchsuchenGetModuleFileName(0) zurück.


Zitat von MSDN: CreateProcess:
__in_opt LPCTSTR lpApplicationName,
__inout_opt LPTSTR lpCommandLine
Du mußt also noch einen wert mehr angeben
Also entweder einen "Dummywert" oder besser nochmals den EXEPath (Delphi-Programme stört es zwar nicht, aber andere Programme vielleicht doch) .


Probier es einfach mal ShowMessage(GetCommandLine); .

Quasi in etwa so:
Delphi-Quellcode:
Params := 'Halli hallo wie gehts denn so?';
Result := CreateProcess(PChar(Programm), PChar('"' + Programm + '" ' + Params), nil, nil, true,
  CREATE_DEFAULT_ERROR_MODE, nil, PChar(ExtractFileDir(Programm)), StartupInfo, ProcessInfo);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (30. Aug 2011 um 15:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Erster Parameter geht verloren

  Alt 30. Aug 2011, 15:14
Normalerweise (So auch in der Remark-Section von msdn) gibt man für Applicationname "null" an und für Commandline eben das "Programm"+Space+Parameter, so wie in einer Batch.

Und das ist (wie vorposter geschrieben) wahrscheinlich nur wegen der C-kompatibilität und argc.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Erster Parameter geht verloren

  Alt 30. Aug 2011, 17:02
Vielen Dank!!!
Wieder etwas dazugelernt...
  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 09:28 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