2010-12-15 82 views
6

Durante la instalación de cualquier aplicación. En general, se le pidió al usuario que cerrara todas las ventanas antes de comenzar la instalación. de lo contrario, la instalación se detendrá en el medio y le pedirá al usuario que cierre todas las ventanas abiertas. Me pidieron que agregue un código en una aplicación XXX. Cuando la aplicación se está ejecutando y si el usuario abrió cualquier otra ventana (por ejemplo, Explorar, navegador, palabra, etc.) , entonces la aplicación debería arrojar una ventana que diga que ha abierto la lista de ventanas. Te pido que por favor me sugieras cómo comenzar en C#.Obtenga la lista de ventanas abiertas C#

Respuesta

0

Pruebe SetWinEventHook Función de WinAPI a través de P/Invocar. Puede conectar el evento EVENT_OBJECT_CREATE, pero no estoy 100% seguro. Nunca lo hice en C#, solo en C/C++.

1

Puede usar la clase System.Diagnostics.Process para obtener la información de todos los procesos que se están ejecutando en su máquina. Luego puede intentar encontrar si la aplicación/proceso previsto se está ejecutando o no.

Puede utilizar el método GetProcesses() o GetProcessByName(). Consulte this msdn link para referencia. Estoy seguro de que puede haber una manera más eficiente de lograr lo mismo. HTH

7

Prueba esto:

var openWindowProcesses = System.Diagnostics.Process.GetProcesses() 
    .Where(p => p.MainWindowHandle != IntPtr.Zero && p.ProcessName != "explorer"); 

El openWindowProcesses debería contener todas las aplicaciones abiertas que tienen una ventana principal activo.

Pongo p.ProcessName != "explorer" en la expresión where porque el explorador es el proceso principal del escritorio y nunca debe cerrarse.

Para ver la ejecución de los procesos, puede usar la clase ManagementEventWatcher. Ver this por favor.

+0

para resolver el problema descrito que necesita para obtener la lista de ventanas por temporizador. ¿Y qué hay de las ventanas ocultas? – DReJ

+0

Creo que quien hizo esta pregunta sabe sobre el uso de temporizadores y ... Y sobre ventanas ocultas; Creo que es suficiente cerrar procesos con ventanas ocultas en tales escenarios. Aunque en esta situación los procesos son más importantes que las ventanas. El programador debe verificar los procesos para descubrir cuál no debería estar abierto. Esto es fácilmente posible cambiando la expresión en el método Where. ¡Pero gracias! Voy a agregar información sobre cómo ver los procesos en mi respuesta. –

+0

muchas gracias por su sugerencia. Una vez que implemente, le informaré el resultado – user517206

1

Establecer un bucle foreach como esto para enumerar sobre todas las aplicaciones abiertas en su sistema (que tienen una ventana principal visible)

foreach (var process in Process.GetProcesses().Where(p => p.MainWindowHandle != IntPtr.Zero)) { 
    //do something with the process here. To display it's name, use process.MainWindowTitle 
    } 
+0

¿Qué sucede si una aplicación tiene múltiples ventanas visibles? – Neolisk

Cuestiones relacionadas