Evento de guardado de publicación de Word de VSTO

Perdón por la duración de esto, en el pasado me han pedido que incluya todo lo que he intentado al hacer este tipo de preguntas.

Estoy escribiendo un complemento de Word y necesito hacer cambios en el documento que no puedo lograr con el modelo de objetos de Word. Por lo tanto, después de guardar el documento en el disco, necesito capturar ese evento, cerrar el archivo, hacer lo que necesito hacer y volver a abrirlo. (Lo sé, no elegante, pero con eso tengo que trabajar).

Word tiene un evento Antes de guardar y Antes de cerrar, pero no después de guardar. Encontré trucos en línea para simular un evento después de guardar creando otro hilo y usando COMIMessageFilter (no de System.Windows.Forms) para manejar llamadas de reintento de COM o publicar un mensaje en el hilo principal para que pueda ejecutar el código después de guardarlo. Pero esto no funciona porque si el archivo se guarda como resultado del intento del usuario de cerrar el documento, no puedo obtener el nombre del archivo en mi método de "devolución de llamada" porque el objeto Word.Document ya se ha eliminado.

Así que intenté explícitamente llamar a Guardarme en mi controlador de eventos BeforeSave y devolver Cancelar = verdadero. Eso funciona muy bien cuando el usuario selecciona guardar, o una vez lo habían guardado en el disco. Pero si el usuario cierra un nuevo documento sin guardarlo y luego selecciona 'sí' para decidir si desea guardarlo o no, Word muestra otro cuadro de diálogo "Guardar como" después de que ya haya manejado el guardado después de regresar del evento BeforeSave, aunque Configuré Cancel = true en mi controlador de eventos BeforeSave.

Entonces intenté hacer algo similar con el evento BeforeClose. Manejo el cierre y me guardo y luego devuelvo Cancelar = verdadero desde mi controlador de eventos. Pero al hacerlo, Word no intenta cerrar varios documentos cuando el usuario intenta cerrar la aplicación.

Incluso intenté manejar WM_CLOSE, pero eso condujo a problemas similares a los anteriores.

¿Alguien puede ofrecer una solución?

Respuestas a la pregunta(1)

Su respuesta a la pregunta