Einzelnen Beitrag anzeigen

Assarbad
(Gast)

n/a Beiträge
 
#1

[Unicode/NT] Argumente eines Programms holen ...

  Alt 25. Aug 2003, 03:40
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-Quellcode:
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-Quellcode:
var
  i: Integer;
  arrParams: PWCarr;
begin
  arrParams := CommandLineToArgvW(GetCommandLineW, i);
  if arrParams <> nil then
  try
    case i of
      3:
        Writeln(String(arrParams^[i - 1])); // Parameter 3
    else
        Writeln(String(arrParams^[i - 2])); // Parameter 2
    end;
  finally
    GlobalFree(THandle(arrParams));
  end;
end;
  Mit Zitat antworten Zitat