Hiho,
als Delphianer lehnt man sich ja oft zurück und benutzt mal eben ParamCount und ParamStr(x). Leider ist diese Variante nur mit ANSI-Longstrings möglich ... Unicode ... keine Spur :-/
Leider, aber genau dazu gibt es ja eine wunderschöne Funktion seit Windows NT 3.5:
CommandLineToArgvW()
Hier der Prototyp:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| type TWCarr = array[0..0] of PWideChar; PWCarr = ^TWCarr;
function CommandLineToArgvW( lpCmdLine: PWideChar; var NumArgs: Integer ): PWCarr; stdcall; external 'shell32.dll'; |
Hier ein Anwendungsbeispiel. Parameter 1 ist der Modulname ... Parameter 2 ist dann das nächste etc pp. Die Indizes in im Array sind aber nullbasiert ... also ist Parameter 1 mit Index 0 erreichbar etc pp. Im Integerwert wird die Anzahl der zurückgegebenen Parameter eingetragen. Freigeben obliegt dem Programm, welches die Funktion benutzt (siehe FINALLY).
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var i: Integer; arrParams: PWCarr; begin arrParams := CommandLineToArgvW(GetCommandLineW, i); if arrParams <> nil then try case i of 3: Writeln(String(arrParams^[i - 1])); else Writeln(String(arrParams^[i - 2])); end; finally GlobalFree(THandle(arrParams)); end; end; |