Mit einem "schönerem" FileExists kannst'e eigentlich meine Variante verwenden.
Das FileExists von Delphi sucht nur an genau dem angegebenem Pfad ... aber da in diesem Fall Dateien ohne Pfadangebe auch über Suchpfade wie in %PATH% angegeben gesucht werden, muß da auch entsprechend geprüft werden.
Eventuell könnte man auch einfach satt mit FileExists zu prüfen direkt versuchen ShellExecute aufzurufen und bei einem Fehler (ERROR_FILE_NOT_FOUND) den nächsten Durchgang versuchen.
Willst du die Trennung erst, um es z.B. irgendwo anzuzeigen, oder willst du es einfach nur direkt aufrufen? (für Letzteres siehe Code)
Delphi-Quellcode:
Function Call(
Const S:
String): HINSTANCE;
Var B: Boolean;
i: Integer;
S, Datei, Parameter:
String;
Begin
SetLength(S, GetSystemDirectory(
nil, 0) - 1);
GetSystemDirectory(PChar(S), Length(S) + 1);
SetCurrentDirectory(PChar(S));
B := False;
i := 0;
Repeat
Inc(i);
While (i <= Length(S))
and (S[i] <> '
')
or B
do Begin
If S[i] = '
"'
Then B :=
not B;
Inc(i);
End;
Datei := StringReplace(Copy(S, 1, i - 1), '
"', '
', [rfReplaceAll]);
Parameter := Trim(Copy(S, i, Length(S)));
Result := ShellExecute(
Handle,
nil, PChar(Datei), PChar(Parameter),
nil, SW_SHOW);
Until not (Result
in [ERROR_FILE_NOT_FOUND, ERROR_PATH_NOT_FOUND])
or (i > Length(S));
End;
(einfach so dahingeschrieben und ungetestet)