Форум: "WinAPI";
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];
ВнизПоследовательный запуск двух программ. Найти похожие ветки
← →
Swinger (2002-02-18 20:30) [0]Здравствуйте! Вопрос такой:
Как в среде WIN организовать последовательный запуск 2-х программ, т.е. по окончание одной должна стартовать другая? Функция в VBA "Shell" запускает задачи одновременно (извините что не привожу пример в Делфи, просто временно пишу на другом языке программирования). Может есть функция API?
Сразу оговорюсь:
Доступа к исходным текстам программы нет, это весьма специализированные расчетные программы не поддерживающие механизма OLE
Я вначале хотел сделать программу, которая бы запустила первую программу, а потом всё время проверяла бы её существование. Если перовй программы больше нет - то запустить вторую. Но как мне кажется это очень сильно будет тратить ресурсы. Может правда есть какое-нибудь решение на ВинАпи?
Заранее благодарен.
← →
Almaz (2002-02-19 03:37) [1]Например так:
procedure MultiExecute(Count: Integer; FileNames: array of String);
var
SI: TStartupInfo;
PI: TProcessInformation;
Result: Boolean;
I: Integer;
begin
for I := 0 to Count - 1 do
begin
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI);
Result := CreateProcess(nil, PChar(FileNames[I]), nil, nil, FALSE,
CREATE_DEFAULT_ERROR_MODE, nil, nil, SI, PI);
if Result then
begin
CloseHandle(PI.hThread);
WaitForSingleObject(PI.hProcess, INFINITE); // Тут мы ждем заверщения процесса
CloseHandle(PI.hProcess);
end;
end;
end;
...
const
Files: array [0..2] of string =
("Myfile.exe param1, param2",
"Myfile2.exe param1, param2",
"Myfile3.exe param1, param2");
begin
MultiExecute(3, Files);
end;
Функция будет запускать последовательно программы Myfile.exe,
MyFile2.exe, ... каждый раз ожидая завершения предыдущей перед запуском следующей.
Удачи.
← →
mentor (2002-02-19 08:03) [2]function WinExecAndWait32(FileName:String; Visibility : integer):integer;
var
zAppName:array[0..512] of char;
zCurDir:array[0..255] of char;
WorkDir:String;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
begin
StrPCopy(zAppName,FileName);
GetDir(0,WorkDir);
StrPCopy(zCurDir,WorkDir);
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(nil,
zAppName, { указатель командной строки }
nil, { указатель на процесс атрибутов безопасности }
nil, { указатель на поток атрибутов безопасности }
false, { флаг родительского обработчика }
CREATE_NEW_CONSOLE or { флаг создания }
NORMAL_PRIORITY_CLASS,
nil, { указатель на новую среду процесса }
nil, { указатель на имя текущей директории }
StartupInfo, { указатель на STARTUPINFO }
ProcessInfo) then Result := -1 { указатель на PROCESS_INF }
else begin
WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess,Result);
end;
end;
← →
Swinger (2002-02-19 08:53) [3]Спасибо всем огромное!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c