Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ShellExecute - ожидание завершения.


Новичек ©   (2007-05-16 07:08:00) 

Уважаемые Мастера, посоветуйте, пожалуйста, как определить, что функция ShellExecute с параметром SW_HIDE завершила свою работу?
Спасибо.


Новичек   (2007-05-16 09:21:00) [1]

Необходимые структуры я заполнял.
Поэкспериментировал с параметрами, заработало вот с такими:


Proga := CreateProcess(nil, 'Proga.exe extended', nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);

Спасибо огромное, Мастера.
С уважением, Сергей.


Джо   (2007-05-16 09:05:00) [2]

> [5] Новичек ©   (16.05.07 08:29)
> Делаю так:
> CreateProcess('proga.exe', 'extended', nil, nil, false,
> NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo)
> Что-то уж больно быстро завершается, практически мгновенно


1. Структура StartUpInfo должна быть инициализированы должным образом. В коде этого не видно.
2. Функция CreateProcess НЕ ожидает завершения процесса. Вместо этого нужно использовать WaitForSingleObject и передавать ей хендл ново-созданного процесса.
3. Вызывая функции, следует проверять возвращаемое ими значение.

В данном случае, схематично будет выглядеть так:

var
 StartUpInfo: TStartupInfo;
 ProcessInfo: TProcessInformation;
...
 ZeroMemory(@StartUpInfo,Sizeof(StartUpInfo));
 StartUpInfo.cb := Sizeof(StartUpInfo);
 
 if not CreateProcess (..., StartUpInfo, ProcessInfo) then
   raise LastOSError;
 
 WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
 

В таком роде.


MBo   (2007-05-16 09:00:00) [3]

поля StartUpInfo, ProcessInfo заполнил? Пример есть в FAQ
всю командную строку можно вторым параметром передавать.


Новичек   (2007-05-16 08:29:00) [4]

2 MBo:
Делаю так:


CreateProcess('proga.exe', 'extended', nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);


Что-то уж больно быстро завершается, практически мгновенно :-)
Нормальная продолжительность выполнения - секунд 20.


MBo   (2007-05-16 08:18:00) [5]

>Не знаю, как использовать её с дополнительными параметрами в командной строке (типа 'proga.exe extended parameter')

хм, не вижу проблем


Новичек   (2007-05-16 07:57:00) [6]

2 MBo:
Не знаю, как использовать её с дополнительными параметрами в командной строке (типа 'proga.exe extended parameter') :-(

2 PZ:
Спасибо, про эту библиотеку я и не вспомнил.


PZ   (2007-05-16 07:47:00) [7]

Можно, также, использовать функцию FileExecuteWaitиз библиотеки RxLib


MBo   (2007-05-16 07:21:00) [8]

CreateProcess используй


Наверх

Титульная страница Поиск, карта сайта Написать письмо