Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-69873
ymin
2002-04-09 11:21
2002.04.22
Как проще всего распечатать StringGrid? Кстати она помещается на.


3-69735
Ежик
2002-04-01 13:30
2002.04.22
Как програмно посчитать кол-во записей в БД?


14-69968
B@Nt
2002-03-11 11:45
2002.04.22
Где мона слить книгу по Базам?


14-69999
McSimm + McSimm
2002-03-15 21:06
2002.04.22
Извините, просто тест


1-69774
P.
2002-04-08 19:48
2002.04.22
WinXP - Реестр





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский