.net ms-word office-interop z-order

.net - ¿Por qué Word no "viene al frente" cuando lo activamos?



ms-word office-interop (4)

Nuestra aplicación winforms interactúa con MS Word y ejecutamos este código cuando se genera un documento y queremos mostrarlo en Word en frente de nuestra aplicación:

[setup w as a Word interop object] w.Visible = True w.Activate()

Cuando se implementa en máquinas con XP que ejecutan Office 2007, esto funciona según lo previsto.

En las máquinas Win7 que ejecutan Office 2010, el documento se carga detrás de nuestra aplicación y parpadea en la barra de tareas.

¿Algunas ideas?


Me encontré con un problema similar recientemente. Mi programa .NET llamaba a una aplicación COM, pero en Win7 algunas veces ni aparecía en la barra de tareas ni en el escritorio. No pude rastrear la causa de esto, pero escribí la siguiente función para solucionar el problema:

[System.Runtime.InteropServices.DllImport("User32.dll")] private static extern bool SetForegroundWindow(IntPtr hwnd); private static void BringAppToFront() { foreach (var p in System.Diagnostics.Process.GetProcesses().Where(p => p.ProcessName == "COMInstanceName")) { if (p.MainWindowHandle.ToInt32() != 0) SetForegroundWindow(p.MainWindowHandle); } }


Tuve el mismo problema al convertir una aplicación de XP con Word 2002 & 3 a Win 7 con Word 2010. Encontré los siguientes trabajos para el primer documento que abría, después de eso todos los documentos nuevos aparecen en la barra de tareas parpadeando.

Después de abrir el documento de Word:

document.Activate(); mWordApplication.Activate(); foreach (Word.Window window in document.Windows) { window.WindowState = Word.WdWindowState.wdWindowStateMinimize; window.WindowState = Word.WdWindowState.wdWindowStateMaximize; }

La estrategia es buscar la Ventana en la que se muestra el documento. Minimizar y maximizar traerá la ventana del documento al frente.

Puede hacer lo mismo con el objeto de la aplicación (como se sugiere aquí http://www.access-programmers.co.uk/forums/showthread.php?t=173871 nota: maximizar sin minimizar no ayuda si la ventana está maximizada para empezar), pero si tienes muchos documentos de Word abiertos, pensarás que has ganado un juego de solitario en Windows ...


No soy un experto, pero acerté con este mismo problema y encontré mi camino hasta aquí. No pude hacer funcionar ninguna de las otras soluciones, pero acabo de encontrar una respuesta a mi problema aquí ...

http://david.gardiner.net.au/2010/05/bad-old-days-of-vba-and-opening-word.html

Acabo de agregar una línea de la siguiente manera (la línea en negrita y cursiva ) a mi código y los documentos de Word se abrieron frente a Excel en las máquinas Win 7 que ejecutan Office 2010:

Dim wordApplication

Establecer wordApplication = CreateObject ("Word.Application")

Application.ActivateMicrosoftApp xlMicrosoftWord

Más información sobre por qué esto funciona en el enlace de arriba.


w.Visible = True w.Activate ()

¡Funciona bien para mí!

Ver los otros motivos.

por ejemplo

Dim oWord As Microsoft.Office.Interop.Word.Application = New Microsoft.Office.Interop.Word.Application Dim oDoc As Microsoft.Office.Interop.Word.Document = oWord.Documents.Open(Path) Dim range As Microsoft.Office.Interop.Word.Range = oDoc.Range range.Find.Execute("[NUM]", False, False, , , , , , , _NUM_, 2, False, ) oWord.Visible = True oWord.Activate()

El documento viene al frente