Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Word против waitForSingleObject 
V
    Опции темы
OlafShadow
Дата 24.11.2006, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 21.6.2006
Где: Архангельская обл

Репутация: нет
Всего: нет



Здравствуйте, 
использую ShellExecuteEx для открытия файлов различных типов. Нужно дожидаться окончания работы запущенной программы, для этого использую 

WaitForSingleObject:

Код

var
  ShellExecuteInfo: TShellExecuteInfo;
  fn: string;
 ...........
  fn:= 'какой-то файл';

  FillChar(ShellExecuteInfo, SizeOf(TShellExecuteInfo), 0);
  with ShellExecuteInfo do begin
    cbSize := Sizeof(TShellExecuteInfo);
    fMask := SEE_MASK_NOCLOSEPROCESS;
    Wnd := Application.Handle;
    lpFile := PChar(fn);
    lpVerb := 'open';
    nShow := SW_SHOWNORMAL;
  end;

  if ShellExecuteEx(@ShellExecuteInfo) then
  begin
      waitForSingleObject(ShellExecuteInfo.hProcess, INFINITE);
      MessageBox(0, 'Все кончено!!!', nil, 0);
  end;


   Все работает прекрасно, до тех пор, пока не начинаю открывать *.doc - файлы. При попытке закрытия Word виснет, и соответственно ожидание в 

waitForSingleObject не заканчивается. 
   Может кто проверит этот код у себя, т.к. подозреваю дело может быть в моем "мс офисе". Правда тот же excel нормально закрывается. Пробовал для 

проверки закрытия процесса использовать GetExitCodeProcess, но с вордом те же грабли smile

Код

repeat
    sleep(200);
    GetExitCodeProcess(ShellExecuteInfo.hProcess, ExitCode);
until ExitCode <> STILL_ACTIVE;


Это сообщение отредактировал(а) Snowy - 24.11.2006, 19:56
PM MAIL ICQ   Вверх
RideX
Дата 24.11.2006, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 94
Регистрация: 8.9.2004

Репутация: 2
Всего: 7



Попробуй просто запустить MS Word через CreateProcess, работает?
PM   Вверх
dumb
Дата 25.11.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



OlafShadow, проверяй hProcess перед тем, как его использовать.
Цитата

hProcess
Handle to the newly started application. This member is set on return and is always NULL unless fMask is set to SEE_MASK_NOCLOSEPROCESS. Even if fMask is set to SEE_MASK_NOCLOSEPROCESS, hProcess will be NULL if no process was launched. For example, if a document to be launched is a URL and an instance of Microsoft Internet Explorer is already running, it will display the document. No new process is launched, and hProcess will be NULL.

Note ShellExecuteEx does not always return an hProcess, even if a process is launched as the result of the call. For example, an hProcess does not return when you use SEE_MASK_INVOKEIDLIST to invoke IContextMenu.


если нужно ожидать завершения, то лучше использовать CreateProcess.
PM MAIL   Вверх
OlafShadow
Дата 25.11.2006, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 21.6.2006
Где: Архангельская обл

Репутация: нет
Всего: нет



Спасибо всем откликнувшимся!

Проблема решена (на мастерах дельфи подсказали): надо так fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;

Мораль: ВНИМАТЕЛЬНЕЕ С ФЛАГАМИ :) !!!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0683 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.