57 Stimmen

Delphi/Lazarus: Kommandozeilen Parameter Tutorial Teil 2: Empfangen

Tutorial von Stefan Trost | Letztes Update am 27.01.2023 | Erstellt am 23.11.2012

In unserem ersten Teil des Kommandozeilen Tutorials für Delphi und Lazarus haben wir uns angesehen, wie man Parameter an ein Programm übergeben kann. In diesem zweiten Teil möchten wir uns nun ansehen, wie wir diese Parameter im Programm empfangen können, um auf sie zu reagnieren und mit ihnen zu arbeiten.

ParamStr und ParamCount

Zwei der wichtigsten Dinge, die wir benötigen, um auf die Parameter von der Kommandozeile im Programm zugreifen zu können, sind ParamStr und ParamCount. ParamStr ist eine Funktion, die ähnlich einem Array den Parameter einer bestimmten Position zurückgibt. ParamCount ist die Anzahl der übergebenen Parameter, die verfügbar sind. Schauen wir uns das im Beispiel an:

// Aufruf mit "MeinProgramm.exe param1 param2"

procedure ShowParameter;
var
   i: integer;
begin
   for i := 0 to ParamCount do
     ShowMessage(ParamStr(i));
end;

// Ausgabe:
// C:\Programme\MeinProgramm.exe
// param1
// param2

Wir rufen unser Programm zusammen mit den Parametern "param1" und "param2" auf. ParamCount hilft uns zu wissen, wie viele Parameter übergeben wurden und verfügbar sind, die Parameter gibt uns die Funktion ParamStr() zurück, so dass wir die Parameter in einer Schleife abrufen und ausgeben können.

Wichtig zu wissen: "ParamStr(0)" enthält immer den kompletten Pfad der Anwendung, wie er ja auch theoretisch in der Kommandozeile zu sehen ist. Danach kommen unsere beiden Parameter in "ParamStr(1)" und "ParamStr(2)".

Rufen wir ParamStr() mit einem Wert größer als ParamCount auf, so wird ein leerer String zurückgegeben.

CmdLine

Über die String-Variable CmdLine, die ebenso wie ParamStr und ParamCount im ganzen Programm verfügbar ist, lässt sich auf den kompletten Text der Kommandozeile zugreifen. Im Beispiel oben würde CmdLine den String "C:\Programme\MeinProgramm.exe param1 param2" enthalten.

FindCmdLineSwitch

Eine weitere Möglichkeit, komfortabel zu prüfen, ob sich ein bestimmter Command-Line-Switch in der Liste der Parameter befindet, ist FindCmdLineSwitch. Wichtig zu wissen ist allerdings, dass FindCmdLineSwitch nur Parameter findet, die mit einem bestimmten (aber definierbaren) Zeichen beginnen. Standardmäßig sind das die beiden Zeichen "/" und "-". Wollen wir uns dazu das folgende Beispiel ansehen:

// Aufruf mit "MeinProgramm.exe param1 /param2"

if FindCmdLineSwitch('param1') then
   ShowMessage('param1'); // wird nicht angezeigt

if FindCmdLineSwitch('param2') then
   ShowMessage('param2'); // wird angezeigt

if FindCmdLineSwitch('param3') then
   ShowMessage('param3'); // wird nicht angezeigt

Nur mit "param2" wird in diesem Code FindCmdLineSwitch true, da "param1" kein "/" voran steht und "param3" nicht in der Liste der Parameter vorkommt.

Weitere Parameter von FindCmdLineSwitch sind IgnoreCase und SwitchChars, die allerdings optional sind. IgnoreCase ist standardmäßig true und sorgt dafür, dass die Klein- und Großschreibung nicht beachtet (true) oder beachtet (false) wird. Mit SwitchCars lässt sich ein TSysCharSet übergeben, eine Menge von Zeichen, die dann auch am Beginn eines Parameters vorkommen können, damit dieser gefunden wird. Ein Beispiel dazu sehen wir hier:

procedure TestFindCmdLineSwitch();
var
  zeichen: TSysCharSet;
begin
  zeichen := ['/','.'];

  if FindCmdLineSwicth('param1') then begin
    //reagiert auf "/param1", "/PARAM1"
    //reagiert nicht auf "param1", ".param1" 
  end;

  if FindCmdLineSwitch('param1', false) then begin
    //reagiert auf "/param1"
    //reagiert nicht auf "param1", ".param1", "/PARAM1"
  end;

  if FindCmdLineSwitch('param1', zeichen, false) then begin
    //reagiert auf "/param1", ".param1"
    //reagiert nicht auf "param1", "/PARAM1"
  end;
end;

Natürlich könnte man dies auch lösen, indem man mit einer Schleife komplett durch alle Parameter geht, aber wie das Beispiel zeigt, ermöglicht FindCmdLineSwitch den kürzeren Code.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

Delphi: Systemweiter HotKey

Tutorial | 3 Kommentare

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.