Ожидание завершения WinWord
От: Demetrio  
Дата: 03.10.06 10:15
Оценка:
Здравствуйте!

Есть такая задача: необходимо запустить документ Word и подождать завершения работы с ним. Для запуска использовал ShellExecute, ShellExecuteEx и CreateProcess. Последние 2 функции позволяли получить handle процесса и передать его в ожидающую функцию WaitForSingleObject.

Проблема в том, что если на момент вызова функции (ShellExecuteEx или CreateProcess) был запущен WinWord, новый процесс не порождается, а просто открывается новое окно с документом. Из-за чего функция WaitForSingleObject не ждет завершения, а сразу же исполняется код следуемый за ней....

Как все же остледить завершения запущенного документа?
Re: Ожидание завершения WinWord
От: altarvic  
Дата: 03.10.06 10:44
Оценка:
Здравствуйте, Demetrio, Вы писали:

D>Здравствуйте!


D>Есть такая задача: необходимо запустить документ Word и подождать завершения работы с ним. Для запуска использовал ShellExecute, ShellExecuteEx и CreateProcess. Последние 2 функции позволяли получить handle процесса и передать его в ожидающую функцию WaitForSingleObject.


D>Проблема в том, что если на момент вызова функции (ShellExecuteEx или CreateProcess) был запущен WinWord, новый процесс не порождается, а просто открывается новое окно с документом. Из-за чего функция WaitForSingleObject не ждет завершения, а сразу же исполняется код следуемый за ней....


D>Как все же остледить завершения запущенного документа?


Как вариант можно использовать OLE Automation.
Сам запускаешь Word, загружаешь в него документ, потом закрываешь.
Re: Ожидание завершения WinWord
От: FoolS.Top Армения  
Дата: 03.10.06 10:54
Оценка:
Здравствуйте, Demetrio, Вы писали:

D>Здравствуйте!


D>Есть такая задача: необходимо запустить документ Word и подождать завершения работы с ним. Для запуска использовал ShellExecute, ShellExecuteEx и CreateProcess. Последние 2 функции позволяли получить handle процесса и передать его в ожидающую функцию WaitForSingleObject.


D>Проблема в том, что если на момент вызова функции (ShellExecuteEx или CreateProcess) был запущен WinWord, новый процесс не порождается, а просто открывается новое окно с документом. Из-за чего функция WaitForSingleObject не ждет завершения, а сразу же исполняется код следуемый за ней....


D>Как все же остледить завершения запущенного документа?


Чувствую, что как-то некрасиво, но можно так

EnumProcess — получить id
OpenProcess — по id получить handle
GetModuleFileNameEx — по handle получить имя файла и сравнить с winword.exe
Feierlich, misterioso
Re[2]: Ожидание завершения WinWord
От: Demetrio  
Дата: 03.10.06 10:56
Оценка:
A>Как вариант можно использовать OLE Automation.
A>Сам запускаешь Word, загружаешь в него документ, потом закрываешь.


К сожалению, необходимо работать не только с документами Word.
Кстати, с Excel-м таких проблем нет — каждый раз при запуске документа он порождает новый процесс.
Re[2]: Ожидание завершения WinWord
От: Demetrio  
Дата: 03.10.06 12:20
Оценка:
FT>Чувствую, что как-то некрасиво, но можно так

FT>EnumProcess — получить id

FT>OpenProcess — по id получить handle
FT>GetModuleFileNameEx — по handle получить имя файла и сравнить с winword.exe

Допустим что я определил, что процесс WinWord действительно запущен.
И я определил handle окна запущенного мной документа. А дальше что? Как организовать ожидание в таком случае? И, главное, какой объект ждать? (что передать функции WaitForSingleObject в качестве параметра)
Re[3]: Ожидание завершения WinWord
От: altarvic  
Дата: 04.10.06 03:30
Оценка:
Здравствуйте, Demetrio, Вы писали:

A>>Как вариант можно использовать OLE Automation.

A>>Сам запускаешь Word, загружаешь в него документ, потом закрываешь.


D>К сожалению, необходимо работать не только с документами Word.

D>Кстати, с Excel-м таких проблем нет — каждый раз при запуске документа он порождает новый процесс.

Можно попробывать по расширению документа из реестра выдирать информацию о программе (doc — Word, xls — Excel), запускать CreateProcess
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.