Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.22;
Скачать: CL | DM;

Вниз

Последовательный запуск двух программ.   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2002.04.22;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.011 c
6-69955
Трактор
2002-02-08 18:26
2002.04.22
Internet


1-69766
Янки Дудль
2002-04-10 02:13
2002.04.22
RX Lib для


1-69806
MystiX
2002-04-09 18:32
2002.04.22
Help with mouse


4-70067
Lerico
2002-02-19 15:16
2002.04.22
Друзья!


3-69701
VAleksey
2002-03-27 11:11
2002.04.22
Работа с ADOTable