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

Вниз

ShellExecuteEx WaitForSingleObject   Найти похожие ветки 

 
Hint ©   (2003-05-30 14:14) [0]

Здраствуйте!
Задача следующая:
Надо запустить связанное с файлом RTF приложение (обычно Word) и дождаться завершения Word. Сделал это следующим образом:

procedure TForm1.Button1Click(Sender: TObject);
var HND: THandle;
SE: SHELLEXECUTEINFO;
begin
SE.cbSize:=SizeOf(SE);
SE.fMask:=SEE_MASK_NOCLOSEPROCESS; //Нам нужен handle процесса
SE.Wnd:=Application.Handle;
SE.lpVerb:=PChar("open");
SE.lpFile:=PChar("1.rtf");
SE.lpParameters:=nil;
SE.lpDirectory:=nil;
SE.nShow:=SW_MAXIMIZE;
SE.hInstApp:=0;

ShellExecuteEx(@SE);
HND:=SE.hProcess;

WaitForSingleObject(HND, INFINITE); ///Ждемс
CloseHandle(HND);
ShowMessage("Word closed!");

end;

И все бы хорошо, вот только Word при выходе надолго зависает. Во конце-концов выходит, но ведь висит собака!
Пробовал на Win2000 и Win95. Висит! Кто-нибудь может подсказать почему?


 
Hint ©   (2003-05-30 14:16) [1]

Чего-то я раздвоился, изините...


 
MBo ©   (2003-05-30 14:45) [2]

кроме закрытия hProcess нужно закрыть и hThread


 
Hint ©   (2003-05-30 15:00) [3]

Извините, не понял.
Word закрывает пользователь. Счетчик пользователей объекта ядра Word будет равен 1, так как я в своем приложении не закрыл Handle. Но вот я закрываю, CloseHandle(HND), счетчие равен 0, система должна грохнуть объект ядра процесс. Но разве она не грохнет и потоки процесса?


 
Игорь Шевченко ©   (2003-05-30 15:49) [4]

Я делал так, может, поможет :)
if NOT ShellExecuteEx(@ShellInfo) then
RaiseLastWin32Error();
if ShellInfo.hProcess <> 0 then
try
WaitForSingleObjectEx(ShellInfo.hProcess, INFINITE, false);
finally
CloseHandle(ShellInfo.hProcess);
end;


 
Hint ©   (2003-05-30 15:54) [5]

Спасибо, попробую


 
Hint ©   (2003-05-30 17:02) [6]

Не помогло. :o(
Наверно, это фишка Word. Если указать, что хочешь открыть текстовый файл, то все работает прекрасно.



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

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

Наверх




Память: 0.47 MB
Время: 0.023 c
4-10508
pirat
2003-06-01 12:09
2003.08.04
Как заставить msxml (TXMLDocument) делать переходы и отступы ?


1-10222
stimm
2003-07-20 22:00
2003.08.04
Вопрос о единицах возврщаемых FileSize-ом


6-10340
Diatel
2003-05-30 07:43
2003.08.04
Интересный вопрос про ICMP


14-10453
Sectey
2003-07-18 13:11
2003.08.04
Midas и TCP/IP


1-10203
Hollywood
2003-07-23 11:38
2003.08.04
Как сделать, чтоб второе окно отобразилось в Taskbar е?