Hi Martin,
ich bin mir nicht sicher, was du mit dem Ignorieren von doppelten backslashes meinst, aber die folgende Funktion liefert dir die Zerlegung einer commandline in einer StringList:
Delphi-Quellcode:
uses
Classes,
StrUtils;
function CreateParamStrings(const CommandLine: String): TStrings;
var
s: String;
p, pNext: PAnsiChar;
begin
Result := TStringList.Create;
p := PChar(CommandLine);
while p^ <> '' do
begin
if p^ <> ' ' then
begin
if p^ <> '"' then
begin
pNext := AnsiStrScan(p, ' ');
SetLength(s, pNext - p);
StrLCopy(PChar(s), p, Length(s));
p := pNext;
end else
s := AnsiDequotedStr(AnsiExtractQuotedStr(p, '"'), '"');
Result.Add(s);
end;
while (p^ <> '') and (p^ = ' ') do
Inc(p);
end;
end;
Testen kannst du so:
Delphi-Quellcode:
procedure TDemoForm.TestButtonClick(Sender: TObject);
begin
with CreateParamStrings('"c:\programme\eigene programme\test.exe" /i /n=123 "a b c"') do
begin
ShowMessage(Text);
Free;
end;
end;
Grüße vom marabu