2009-08-13 50 views
1

我正在部署使用C#在Visual Studio 2008中创建的Outlook 2007加载项。我创建了一个从word文档中提取文本的函数。为什么word作为后台进程通过outlook addin偷取焦点?

问题是,大约20%的时间,这将暂时抓住焦点,并把它给我的插件。我坐着观看sysinternal的进程资源管理器大约10分钟,而我的加载项正在运行,并且仅在进程运行超过2秒时才发生。 WINWORD程序关闭后 - 重点将恢复到之前的任何程序。

有没有人知道为什么WINWORD进程会代表我的加载项窃取重点以及如何避免它?

public static string ExtractWordDocument(object filename) 
    { 
     Word.Application wordApp = new Word.Application(); 

     string content = null; 
     Word.Document doc = null; 

     try 
     { 
      doc = wordApp.Documents.OpenNoRepairDialog(
         ref filename, 
         ref officeObjects.Negative, 
         ref officeObjects.ReadOnly, 
         ref officeObjects.Negative, 
         ref officeObjects.Nullobj, 
         ref officeObjects.Nullobj, 
         ref officeObjects.Nullobj, 
         ref officeObjects.Nullobj, 
         ref officeObjects.Nullobj, 
         ref officeObjects.Nullobj, 
         ref officeObjects.Nullobj, 
         ref officeObjects.Negative, 
         ref officeObjects.Negative, 
         ref officeObjects.Nullobj, 
         ref officeObjects.Nullobj, 
         ref officeObjects.Nullobj); 

      content = doc.Content.Text; 
     } 
     catch (Exception exc) 
     { 
      Util.Log("Error processing word document - Exception received: " + exc.ToString()); 
     } 

     if (doc != null) 
     { 
      ((Word._Document)doc).Close(ref officeObjects.SaveChanges, ref officeObjects.OriginalFormat, ref officeObjects.RouteDocument); 
     } 

     ((Word._Application)wordApp).Quit(ref officeObjects.SaveChanges, ref officeObjects.OriginalFormat, ref officeObjects.RouteDocument); 

     System.Runtime.InteropServices.Marshal.FinalReleaseComObject(wordApp); 

     doc = null; 
     wordApp = null; 

     return content; 
    } 

回答

1

这种行为没有理由被发现,但我们结束了IFilter的实施,使其毫无意义。

对于任何其他人只是简单地从word文档中提取文本 - 不要使用word,请使用IFilter。

0

如果你说:

wordApp .Visible = false; 

编辑:哦,等等你说你的插件会得到重点,而不是单词实例。噢,试试上面的反正:)

+0

不准。根本不会改变行为。 – McAden 2009-08-13 23:23:20

相关问题