Jedem Programm kann man beim Aufruf zusätzliche Informationen mitgeben,
sogenannte Argumente oder Kommandozeilenparameter. An diese Informationen
kommt man mit den Funktionen GetCommandLineA und GetCommandLineW.
Die erste Funktion liefert einen Zeiger auf die Kommandozeile in ANSI-Form
(ein Byte für jeden Buchstaben), die zweite in Unicode-Form (zwei Bytes für
jeden Buchstaben) zurück. Diese Kommandozeile entspricht genau der Übergabe,
also mit allen Leerzeichen, Tabulatoren, Anführungszeichen. Um die einzelnen
Argumente "mundgerecht" aufzubearbeiten, kann man in WinNT (Windows NT, 2000, XP,
aber nicht 95, 98, ME) die Funktion CommandLineToArgvW benutzen:
Bestimmte Zeichen haben eine Sonderfunktion. Leerzeichen
(ASCII 32) und Tabulatoren (ASCII 9) trennen die Argumente voneinander. Sollen
diese Zeichen nicht trennen, z.B. in
C:\Dokumente und Einstellungen, so
ist dieser Begriff in Anführungszeichen einzuschließen:
"C:\Dokumente und Einstellungen".
Will man das Anführungszeichen als Buchstaben behandeln, so muss das Zeichen
"escaped" werden, indem man ihm einen umgekehrten Schrägstrich (Backslash)
voranstellt:
"dir \"C:\Dokumente und Einstellungen\" \b".
Nun gibt es Fälle, wo bei einer
\"-Kombination der Backslash ein Buchstabe bleiben
und das Anführungszeichen seine Sonderfunktion behalten soll. In diesem Fall
wird auch der Backslash escaped:
"C:\Dokumente und Einstellungen\\".
Und zu guter Letzt gibt es Fälle, wo ein Backslash als Buchstabe auf ein Anführungszeichen
als Buchstabe trifft, also sowohl Backslash als auch Anführungszeichen keine
Sonderfunktionen haben:
"dir \"C:\Dokumente und Einstellungen\\\" \b".
Es wurde also sowohl der Backslash escaped wie auch das Anführungszeichen, was
zu der seltsam anmutenden Folge von drei Backslashes und einem Anführungszeichen
führt. Nun wird das Verhalten von CommandLineToArgvW etwas sonderbar:
Eine Folge
\\\"
wird als
\"
interpretiert, eine Folge
\\\a
aber als
\\\a .
Ob zwei Backslashes hintereinander zu einem einzigen Backslash verkürzt werden
oder nicht, hängt also davon ab, ob die Folge mit einem Anführungszeichen
abgeschlossen wird oder nicht.
CommandLineToArgvW gibt es nicht als ANSI-Version und auch nicht
für Win9x (Windows 95, 98, ME). Nachfolgend wird diese Funktion für ANSI-Zeichen
nachgebildet. Allerdings werden zwei Backslashes in Folge immer
als ein einziges Backslash interpretiert.