VSTO Word post save event

Tut mir leid, dass ich in der Vergangenheit alles, was ich versucht habe, in diese Art von Fragen aufgenommen habe.

Ich schreibe ein Word-Add-In und muss Änderungen am Dokument vornehmen, die mit dem Word-Objektmodell nicht möglich sind. Nachdem das Dokument auf der Festplatte gespeichert wurde, muss ich dieses Ereignis aufzeichnen, die Datei schließen, die erforderlichen Schritte ausführen und sie erneut öffnen. (Ich weiß, nicht elegant, aber damit muss ich arbeiten.)

Word hat Vor dem Speichern und Vor dem Schließen, aber kein Ereignis nach dem Speichern. Ich habe online Tricks gefunden, um ein Ereignis nach dem Speichern zu simulieren, indem ich einen weiteren Thread erstellt und COM's @ verwendet hab IMessageFilter (nicht von System.Windows.Forms) zum Verarbeiten von COM-Wiederholungsaufrufen oder zum Zurückschreiben einer Nachricht in den Hauptthread, damit ich Code ausführen kann, nachdem er gespeichert wurde. Dies funktioniert jedoch nicht, da beim Speichern der Datei aufgrund des Versuchs des Benutzers, das Dokument zu schließen, der Dateiname in meiner "Rückruf" -Methode nicht abgerufen werden kann, da das Word.Document-Objekt bereits gelöscht wurde.

Also habe ich versucht, mich explizit in meinem BeforeSave-Ereignishandler zu speichern und Cancel = true zurückzugeben. Das funktioniert hervorragend, wenn der Benutzer "Speichern" auswählt oder einmal auf der Festplatte gespeichert hat. Wenn der Benutzer ein neues Dokument schließt, ohne es zu speichern, und dann "Ja" wählt, um zu entscheiden, ob er es speichern möchte oder nicht, zeigt Word ein weiteres Dialogfeld "Speichern unter" an, nachdem ich das Speichern bereits ausgeführt habe, nachdem ich vom BeforeSave-Ereignis zurückgekehrt bin In meinem BeforeSave-Ereignishandler habe ich Cancel = true gesetzt.

So habe ich dann versucht, etwas Ähnliches mit dem BeforeClose-Ereignis zu machen. Ich kümmere mich um das Schließen, spare mich und gebe dann Cancel = true von meinem Event-Handler zurück. Dies verhindert jedoch, dass Word versucht, mehrere Dokumente zu schließen, wenn der Benutzer versucht, die Anwendung zu beenden.

Ich habe sogar versucht, mit WM_CLOSE umzugehen, aber das führte zu ähnlichen Problemen wie oben.

Kann jemand eine Lösung anbieten?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage