2015-12-18 7 views
0

Я автоматизирую MSWord в приложении WPF. Все работает нормально, но a Нажмите «Пуск» -> Microsoft Word 2010 прикрепляет новый пустой документ к моему экземпляру, который уже создан приложением Wpf. Как ограничить это поведение?Нажмите «Пуск» -> Microsoft Word 2010 прикрепляет новый пустой документ к существующему экземпляру

public partial class MainWindow : System.Windows.Window 
{ 
    Word.Application _oApp; 
    Word.Document _oDoc; 

    object oMissing = System.Reflection.Missing.Value; // Missing Value 
    object oTrue = true; 
    object oFalse = false; 

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void btn_Create_Click(object sender, RoutedEventArgs e) 
    { 

      _oApp = new Word.Application(); 
      _oApp.Visible = true; 
      _oApp.ShowWindowsInTaskbar = false; 
      ((Word.ApplicationEvents4_Event)_oApp).NewDocument += new Word.ApplicationEvents4_NewDocumentEventHandler(Application_NewDocument); 
    } 

    private void btn_AddDoc_Click(object sender, RoutedEventArgs e) 
    { 
     _oDoc = _oApp.Documents.Add(oMissing, oMissing, oMissing); 
    } 

    private void btn_RemoveDoc_Click(object sender, RoutedEventArgs e) 
    { 
     _oDoc.Close(oFalse, oMissing, oMissing); 

    } 

    private void Application_NewDocument(Word.Document doc) 
    { 
     MessageBox.Show("New: " + _oApp.ActiveDocument.Name); 
    } 
} 
+0

Можете ли вы показать нам код? – Irshad

+0

@Irshad Пожалуйста, найдите код в вопросе ... –

+0

Когда я открываю приложение Word из меню «Пуск», событие «Приложение_NewDocument (Word.Document doc)» не запускается, но новый пустой документ добавляется в _oApp.Documents –

ответ

0

Microsoft в списке это как ошибку и проиллюстрирована обходной путь к этой проблеме в следующей статье базы знаний

BUG: Запуск Слово вручную Использует тот же экземпляр, как Automation - https://support.microsoft.com/en-us/kb/188546

using System.Windows; 
using Word = Microsoft.Office.Interop.Word; 

namespace WordAutomationTestApp 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : System.Windows.Window 
    { 
     Word.Application _oApp; 
     Word.Document _oDoc; 

     object oMissing = System.Reflection.Missing.Value; // Missing Value 
     object oTrue = true; 
     object oFalse = false; 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void btn_Create_Click(object sender, RoutedEventArgs e) 
     { 
      //To restrict the automation instance sharing with the user's documents. 
      //Create a temporary app instance and quit the same after the automation instance is created. 
      //Ref :: Go through the following work around. 
      //https://support.microsoft.com/en-us/kb/188546 

      Word.Application temp = new Word.Application();  //Create temporary instance. 
      _oApp = new Word.Application();      //Create automation instance. 
      temp.Quit(oFalse,oMissing,oMissing); //Close the temporary instance. 
      temp = null; 
      _oApp.Visible = true; 
      _oApp.ShowWindowsInTaskbar = false; 
      ((Word.ApplicationEvents4_Event)_oApp).NewDocument += new Word.ApplicationEvents4_NewDocumentEventHandler(Application_NewDocument); 
     } 

     private void btn_AddDoc_Click(object sender, RoutedEventArgs e) 
     { 
      _oDoc = _oApp.Documents.Add(oMissing, oMissing, oMissing); 
     } 

     private void btn_RemoveDoc_Click(object sender, RoutedEventArgs e) 
     { 
      _oDoc.Close(oFalse, oMissing, oMissing); 

     } 

     private void Application_NewDocument(Word.Document doc) 
     { 
      MessageBox.Show("New: " + _oApp.ActiveDocument.Name); 
     } 
    } 
} 

Моя искренняя благодарность @Cindy Meister за помощь в решении этой проблемы.