Hay una especie de solución, pero no es bonita. El problema principal es que Word se registra en el ROT (Running Object Table) y otras aplicaciones pueden acceder fácilmente a la instancia de Word registrada en el ROT (esto es lo que hace la función GetObject de VB, por ejemplo).
Así, en su aplicación, usted básicamente tiene que hacer 2 cosas
- Trate de GetObject (es decir, consultar la ROT para una instancia en ejecución)
- Si usted consigue uno, usted sabe que tiene para crear una nueva instancia de Word para usar (CreateObject en VB, el proceso es diferente en otras lenguas).
- Si NO obtiene una, tiene que crear 2 nuevas instancias de Word. El primero se registrará automáticamente en el ROT, el segundo no. Usa la segunda instancia y bastante la primera instancia.
A pesar de que poner fin a esta primera instancia, no va a "retroactivamente" registro en la tabla ROT, y otras aplicaciones generalmente no se opondrá una referencia a él a utilizar, van a crear automáticamente una nueva instancia, que, dado que ya no se registra ninguna otra instancia en el ROT, se registrará.
Dicho esto, todavía es posible para otras aplicaciones para obtener en su instancia de Word, por lo que esta técnica no es a prueba de balas. ¿Cómo? Porque Word TAMBIÉN registra cada DOCUMENTO cargado en el ROT. Pero esa es una característica que rara vez se usa.
Me gustaría ver una respuesta al respecto:> – naacal
Al cambiar el comportamiento de Word, los usuarios * muy * se confundirán. ¿Que problema estas tratando de resolver? – egrunin
Como describí, el usuario y la aplicación deberían obtener una instancia de palabra diferente. Pero si el usuario abre un documento (haga doble clic en docx) mientras la aplicación está trabajando en una instancia de palabra oculta, el documento de usuario se abrirá en esta instancia y bloqueará mis operaciones en esta instancia porque el documento activo cambia. – Gpx