Гаджимурадов Рустам |
Джон Лок | Что в строке является непосредственно объект, а что параметр с которым он должен выполняться. | Это нельзя никак узнать. Искусственный интеллект еще не придумали. Вы сами должны знать, что может и должно передаваться в параметрах к Вашей программе - когда сможете объяснить это словами, можно будет это запрограммировать, но не раньше.
Джон Лок | т.е начинаю путаться в пробелах и кавычках | Я же сказал - покажите код. А пока - RTFM ParamStr(i). |
Но винда же как-то узнает что я ей некорректный путь подсовываю, я выложу код, но еще раз повторю: ребят как только я уверен что предугадал все ситуации тут же вылезет путь который моя процедура распарсит неверно. Мне кажется это изначально неправильный путь парсить такие строки посимвольно самому.
procedure ParsePath(Value: string; var AppName, Params: string);
var
i: integer;
AppList, ParamsList: TStringList;
begin
AppList:= TStringList.Create;
ParamsList := TStringList.Create;
AppName := '';
Params := '';
try
i := 1;
while i <= length(Value) do
begin
if (Value[i] <> ' ')
and
(Value[i] <> '"')
and
(Value[i] <> '/')
and
(i <> 1) then
begin
if Value[i - 1] = ' ' then
begin
if (Pos(' ', Copy(Value, i, length(Value)))-1) <> -1 then
AppList.Add(Copy(Value,
i,
Pos(' ', Copy(Value, i, length(Value)))-1
)
)
else
AppList.Add(Copy(Value,
i,
length(Value)
)
);
end;
end;
if (i = 1)
and
(Value[1] <> ' ')
and
(Value[1] <> '"')
and
(Value[1] <> '/') then
begin
if Pos(' ', Copy(Value, i, length(Value))) <> 0 then
AppList.Add(Copy(Value,
i,
Pos(' ', Copy(Value, i, length(Value)))-1
)
)
else
AppList.Add(Copy(Value,
i,
length(Value)
)
)
end;
if Value[i] = '"' then
begin
if (Pos('"', Copy(Value, i + 1, length(Value)))-1) <> -1 then
begin
AppList.Add(Copy(Value,
i + 1,
Pos('"', Copy(Value, i + 1, length(Value)))-1
)
);
i := Pos('"', Copy(Value, i + 1, length(Value))) + i;
end;
end;
if Value[i] = '/' then
begin
if pos(' ', Copy(Value, i, pos(' ', Copy(Value, i, length(Value))))) <> 0 then
ParamsList.Add(Copy(Value,
i,
pos(' ', Copy(Value, i, pos(' ', Copy(Value, i, length(Value))))) - 1
)
)
else
ParamsList.Add(Copy(Value,
i,
length(Value)
)
);
end;
inc(i);
end;
for i := 0 to AppList.Count - 1 do
begin
if pos(':\', AppList.Strings[i]) = 0 then
AppList.Strings[i] := GetSystem32Folder + '\' + AppList.Strings[i];
AppName := AppName + ' ' + AppList.Strings[i];
end;
for i := 0 to ParamsList.Count - 1 do
Params := Params + ' ' + ParamsList.Strings[i];
AppName := Copy(AppName, 2, length(AppName));
finally
AppList.Free;
ParamsList.Free;
end;
end;