Запустите Word и следите, если документ закрыт - PullRequest
5 голосов
/ 09 февраля 2011

нам нужен для нашего школьного проекта способ запустить экземпляр слова и отслеживать, был ли документ закрыт.COM-API от слова не имеет события для этого, есть ли другие способы сделать это?

В настоящее время мы используем COM-API от слова, но все остальное будет хорошо.Мы программируем на C #.

Ответы [ 2 ]

2 голосов
/ 10 февраля 2011

Используйте процесс winword, чтобы проверить, завершен ли процесс, работающий с определенным файлом, или нет.

Если вы не знаете процесс недавно запущенного экземпляра, используйте это или просто перехватите завершенное событие процесса.

Получить все текстовые процессы

var info = Process.GetProcessesByName("winword").FirstOrDefault();

Определите процесс конкретного файла, используя Process.MainWindowTitle

Крюк вышел из события процесса Process.Exited

2 голосов
/ 09 февраля 2011

Если вы используете библиотеку Microsoft.Office.Interop.Word, есть событие, на которое вы также можете подписаться:

Microsoft.Office.Interop.Word.Application wordApp =
    new Microsoft.Office.Interop.Word.Application();
wordApp.DocumentBeforeClose +=
    new ApplicationEvents4_DocumentBeforeCloseEventHandler(
        wordApp_DocumentBeforeClose);

...

private void wordApp_DocumentBeforeClose(Document Doc, ref bool Cancel)
{
    // Do your thing
}

Edit:

Чтобы позаботиться о блокировке файла ==> взгляните на этот пост . Как вы можете видеть, в DocumentBeforeClose сделано несколько вещей:

  1. Проверьте, сохранен ли документ. Если нет ==> спросите, где его сохранить и сделайте это сами.
  2. Закройте документ самостоятельно
  3. Закрыть слово

После того, как обо всем этом позаботятся, вы можете заняться своими делами. Замок должен быть снят.

...