Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];

Вниз

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

Форум: "WinAPI";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.009 c
1-10289
Ivolg
2003-07-21 13:40
2003.08.04
Анимация


3-10115
abc
2003-07-14 10:50
2003.08.04
как не визуальными средствами создать вычисляемое поле?


6-10317
som
2003-05-27 12:20
2003.08.04
FTP


7-10464
Alexor
2003-05-22 00:32
2003.08.04
PrintDialog


14-10402
Akim2
2003-07-17 12:54
2003.08.04
WEB Camera





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский