A
AnthonySoprano
Знаю про существование гугла, и что подобная тема в интернете разжевана донельзя, но требуется конкретный код.
Есть компонент RzCheckTree из пачки Raize (древовидный список с "галочками"; и просьба, не говорите, что на WinAPI можно сделать так же и с простым TreeView). В цикле читается информация о файлах *.ехе, которые необходимо запустить в цикле. В списке отмечаются нужные пункты, по кнопке запускается цикл, где читаются пути к файлам, и эти самые exe-шники запускаются. После завершения работы одного, запускается другой exe-шник, и так далее до конца списка. При этом, после завершения работы приложения необходимо узнать код возврата (GetExitCodeProcess). Мой не совсем рабочий код обработчика нажатия кнопки:
Проблема в том, что не могу правильно организовать/объявить цикл. И мне кажется, путь, по которому тут идет обращение к файлу, не тот, который требуется.
Состав INI:
[секция/группа_в_списке]
путь1=С:\MyProg1.exe
путь2=С:\MyProg2.exe
и т.д.
P.S.: чувствую, из-за Raize'а у вас могут возникнуть заминки. И тем не менее, прошу хотя бы указать на мои ошибки в циклах :welcome:
Есть компонент RzCheckTree из пачки Raize (древовидный список с "галочками"; и просьба, не говорите, что на WinAPI можно сделать так же и с простым TreeView). В цикле читается информация о файлах *.ехе, которые необходимо запустить в цикле. В списке отмечаются нужные пункты, по кнопке запускается цикл, где читаются пути к файлам, и эти самые exe-шники запускаются. После завершения работы одного, запускается другой exe-шник, и так далее до конца списка. При этом, после завершения работы приложения необходимо узнать код возврата (GetExitCodeProcess). Мой не совсем рабочий код обработчика нажатия кнопки:
Код:
var si:StartupInfo;
pi:TProcessInformation;
ExitCode: Cardinal;
sections_count, strings_count: Integer;
File_Path: string;
MyIni: TIniFile;
IniSections, IniStrings: TStringList;
begin
try
MyIni:= tinifile.create(extractfilepath(application.ExeName) + '\MyIni.ini');
for Sections_count:=1 to RzCheckTree1.Items.Count-1 do
for Strings_count:=1 to RzCheckTree1.Items.Count-1 do
begin
with si do
begin
ZeroMemory(@si,sizeof(si));
cb:=SizeOf(si);
dwFlags:=startf_UseShowWindow;
wShowWindow:=sw_ShowNormal;
end;
MyIni.readstring(IniSections.Strings[sections_count],IniStrings.Strings[strings_count],File_Path);
CreateProcess(nil,pchar(extractfilepath(application.ExeName)+File_Path),nil,nil,false,0,nil,nil,si,pi)
WaitForSingleObject(pi.hProcess,INFINITE);
GetExitCodeProcess(pi.hprocess,ExitCode);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
except
ShowMessage('Запуск не удался! Путь: ' +File_Path);
end;
end;
Проблема в том, что не могу правильно организовать/объявить цикл. И мне кажется, путь, по которому тут идет обращение к файлу, не тот, который требуется.
Состав INI:
[секция/группа_в_списке]
путь1=С:\MyProg1.exe
путь2=С:\MyProg2.exe
и т.д.
P.S.: чувствую, из-за Raize'а у вас могут возникнуть заминки. И тем не менее, прошу хотя бы указать на мои ошибки в циклах :welcome: