Sorry für die Länge dieser, In der Vergangenheit wurde ich gebeten, alles, was ich versucht habe, wenn Sie diese Art von Fragen gestellt haben.VSTO Word Beitrag Ereignis speichern
Ich schreibe ein Word-Add-In und muss Änderungen am Dokument vornehmen, die ich mit dem Word-Objektmodell nicht erreichen kann. Nachdem das Dokument auf dem Datenträger gespeichert wurde, muss ich daher dieses Ereignis erfassen, die Datei schließen, tun, was ich tun muss, und es erneut öffnen. (Ich weiß, nicht elegant, aber das ist, woran ich arbeiten muss.)
Word hat vor dem Speichern und vor dem Schließen, aber kein Ereignis nach dem Speichern. Ich habe online Tricks gefunden, um ein After-Save-Event zu simulieren, indem ich einen anderen Thread erstelle und COMs IMessageFilter (nicht von System.Windows.Forms) verwende, um COM Retry-Aufrufe zu verarbeiten oder eine Nachricht zurück auf den Haupt-Thread zu schreiben, damit ich Code nach dem Speichern ausführen kann . Aber das funktioniert nicht, da, wenn die Datei gespeichert wird, weil der Benutzer versucht, das Dokument zu schließen, ich den Dateinamen in meiner "Callback" -Methode nicht abrufen kann, da das Word.Document-Objekt bereits gelöscht wurde.
So versuchte ich explizit rufen Sie mich in meinem BeforeSave-Ereignishandler speichern und zurück Cancel = True. Das funktioniert sehr gut, wenn der Benutzer das Speichern auswählt oder wenn er einmal auf der Festplatte gespeichert wurde. Wenn der Benutzer jedoch ein neues Dokument ohne Speichern schließt und dann "Ja" auswählt, ob er speichern möchte, zeigt Word einen anderen "SaveAs" -Dialog an, nachdem ich die Speicherung bereits durchgeführt habe, obwohl ich vom BeforeSave-Ereignis zurückgekehrt bin In meinem BeforeSave-Ereignishandler habe ich Cancel = true gesetzt.
Also habe ich versucht, etwas ähnliches mit dem BeforeClose-Ereignis zu tun. Ich handle mit dem Schließen und speichere mich selbst und dann Cancel = true von meinem Event-Handler zurück. Dies verhindert jedoch, dass versucht wird, mehrere Dokumente zu schließen, wenn der Benutzer versucht, die Anwendung herunterzufahren.
Ich habe sogar versucht, WM_CLOSE, aber das führte zu ähnlichen Problemen wie oben.
Kann jemand eine Lösung anbieten?