Есть такая задача: необходимо запустить документ Word и подождать завершения работы с ним. Для запуска использовал ShellExecute, ShellExecuteEx и CreateProcess. Последние 2 функции позволяли получить handle процесса и передать его в ожидающую функцию WaitForSingleObject.
Проблема в том, что если на момент вызова функции (ShellExecuteEx или CreateProcess) был запущен WinWord, новый процесс не порождается, а просто открывается новое окно с документом. Из-за чего функция WaitForSingleObject не ждет завершения, а сразу же исполняется код следуемый за ней....
Как все же остледить завершения запущенного документа?
Здравствуйте, Demetrio, Вы писали:
D>Здравствуйте!
D>Есть такая задача: необходимо запустить документ Word и подождать завершения работы с ним. Для запуска использовал ShellExecute, ShellExecuteEx и CreateProcess. Последние 2 функции позволяли получить handle процесса и передать его в ожидающую функцию WaitForSingleObject.
D>Проблема в том, что если на момент вызова функции (ShellExecuteEx или CreateProcess) был запущен WinWord, новый процесс не порождается, а просто открывается новое окно с документом. Из-за чего функция WaitForSingleObject не ждет завершения, а сразу же исполняется код следуемый за ней....
D>Как все же остледить завершения запущенного документа?
Как вариант можно использовать OLE Automation.
Сам запускаешь Word, загружаешь в него документ, потом закрываешь.
Здравствуйте, 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
A>Как вариант можно использовать OLE Automation. A>Сам запускаешь Word, загружаешь в него документ, потом закрываешь.
К сожалению, необходимо работать не только с документами Word.
Кстати, с Excel-м таких проблем нет — каждый раз при запуске документа он порождает новый процесс.
FT>Чувствую, что как-то некрасиво, но можно так
FT>EnumProcess — получить id FT>OpenProcess — по id получить handle FT>GetModuleFileNameEx — по handle получить имя файла и сравнить с winword.exe
Допустим что я определил, что процесс WinWord действительно запущен.
И я определил handle окна запущенного мной документа. А дальше что? Как организовать ожидание в таком случае? И, главное, какой объект ждать? (что передать функции WaitForSingleObject в качестве параметра)
Здравствуйте, Demetrio, Вы писали:
A>>Как вариант можно использовать OLE Automation. A>>Сам запускаешь Word, загружаешь в него документ, потом закрываешь.
D>К сожалению, необходимо работать не только с документами Word. D>Кстати, с Excel-м таких проблем нет — каждый раз при запуске документа он порождает новый процесс.
Можно попробывать по расширению документа из реестра выдирать информацию о программе (doc — Word, xls — Excel), запускать CreateProcess