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

Вниз

ShellExecute - ожидание завершения.   Найти похожие ветки 

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

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


 
MBo ©   (2007-05-16 07:21) [1]

CreateProcess используй


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

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


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

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

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


 
MBo ©   (2007-05-16 08:18) [4]

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

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


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

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


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


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


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

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


 
Джо ©   (2007-05-16 09:05) [7]

> [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);
 

В таком роде.


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

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


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

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



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.031 c
1-1176217171
I-New
2007-04-10 18:59
2007.06.03
вывод TPopupMenu с Timage при нажатии на левую кнопку мыши


3-1173947861
Grant
2007-03-15 11:37
2007.06.03
BLOBы в Oracle


2-1178911016
programmist87
2007-05-11 23:16
2007.06.03
Завершение приложения после исключительной ситуации


4-1167142342
MasteroK
2006-12-26 17:12
2007.06.03
Как извлечь из буфера обмена первые N символов текста.


11-1160962882
Grademax
2006-10-16 05:41
2007.06.03
Как в KOL создать кнопку в стиле XP с картинкой