Допустим есть программа "C:\Test\Test.exe" которая перечисляет свои параметры через ParamStr.
- Код: Выделить всё
program test;
uses LazUTF8;
var
i:integer;
Str:UTF8String;
begin
Str:= 'Командная строка:';
Str:= UTF8ToConsole(Str);
WriteLn(Str);
for i:= 0 to System.Paramcount do begin
Str:= LazUTF8.ParamStrUTF8(i);
Str:= UTF8ToConsole(Str);
WriteLn(Str);
end;
ReadLn;
end.
Ее запускает программа "project1":
- Код: Выделить всё
program project1;
uses SysUtils, Windows, LazUTF8;
function SimpleCreateProcess(Exe:utf8string; Line:utf8string = ''):boolean;
var
AppName,ComLine,CurDir:unicodestring;
StartInfo:TSTARTUPINFO;
Handles:TPROCESSINFORMATION;
begin
Result:= false;
if Exe = '' then exit;
AppName:= UTF8toUTF16(Exe);
ComLine:= UTF8toUTF16(Line);
CurDir:= UTF8toUTF16(ExtractFileDir(Exe));
FillChar(Handles,SizeOf(Handles),0);
FillChar(StartInfo,SizeOf(StartInfo),0);
StartInfo.cb:= SizeOf(StartInfo);
if CreateProcessW(@AppName[1],@ComLine[1],nil,nil,false,0,nil,@CurDir[1],StartInfo,Handles) = false then exit;
CloseHandle(Handles.hProcess);
CloseHandle(Handles.hThread);
Result:= true;
end;
begin
SimpleCreateProcess('c:\test\test.exe','"Аргумент 1" "Аргумент 2" "Аргумент 3"');
end.
Появляется консоль со следующими строками:
- Код: Выделить всё
Командная строка:
c:\test\test.exe
Аргумент 2
Аргумент 3
"Аргумент 1" исчез. Как временное решение я использую свою версию функций ParamStrUTF8 и Paramcount.
Я нуб и не умею устанавливать SVN лазарус. Надеюсь на форуме есть человек с хорошим знанием английского который проверит есть ли ошибка в Trunk версиях FPC/лазаруса и отправит баг-репорт.