2009-08-13 4 views
1

Ich stelle ein Outlook 2007-Add-In bereit, das mit C# in Visual Studio 2008 erstellt wird. Ich habe eine Funktion zum Extrahieren von Text aus einem Word-Dokument erstellt.Warum ist Word als Hintergrundprozess über Outlook-Add-In-Stealing-Fokus?

Das Problem ist, dass etwa 20% der Zeit, wird dies vorübergehend Fokus und geben sie zu meinem Addin. Ich saß und beobachtete den Prozess-Explorer von sysinternal für etwa 10 Minuten, während mein Add-In lief und es passierte nur, wenn der Wortprozess länger als 2 Sekunden lief. Nachdem der WINWORD-Vorgang abgeschlossen wurde, wird der Fokus wieder auf das vorherige Programm zurückgesetzt.

Weiß jemand, warum der WINWORD-Prozess Fokus im Namen meines Add-Ins stehlen würde und wie man es vermeiden könnte?

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; 
    } 

Antwort

1

Es wurde nie ein Grund für dieses Verhalten gefunden, aber am Ende ging es mit einer IFilter-Implementierung, die es sinnlos machte.

Für alle anderen, die einfach Text aus einem Word-Dokument extrahieren - verwenden Sie kein Wort, verwenden Sie einen IFilter.

0

Was ist, wenn Sie sagen:

wordApp .Visible = false; 

?

Edit: Oh, warte, du sagst, dass dein Add-in den Fokus bekommen wird, nicht die Wort-Instanz. Naja, versuche das obige trotzdem :)

+0

no-go. Verhalten ändert sich überhaupt nicht. – McAden

Verwandte Themen