2010-12-09 33 views

Respuesta

14

Puede usar el Process.GetProcesses method para proporcionar información sobre todos los procesos que se están ejecutando actualmente en su computadora.

Sin embargo, esto muestra todos los procesos en ejecución, incluidos los que no se muestran necesariamente en la barra de tareas. Así que lo que necesita hacer es filtrar aquellos procesos que tienen un vacío MainWindowTitle .El anteriormente ligado a la documentación explica por qué esto funciona:

Un proceso ha asociado una ventana principal con ella sólo si el proceso tiene una interfaz gráfica . Si el proceso asociado no tiene una ventana principal (para que MainWindowHandle sea cero), MainWindowTitle es una cadena vacía ("").

Por lo tanto, se podría usar algo como el siguiente código, que se imprimirá (a una ventana de la consola) una lista de todas las aplicaciones actualmente en ejecución que son visibles en la barra de tareas:

Process[] processes = Process.GetProcesses(); 
foreach (var proc in processes) 
{ 
    if (!string.IsNullOrEmpty(proc.MainWindowTitle)) 
     Console.WriteLine(proc.MainWindowTitle); 
} 
+0

+1: Buena respuesta. –

+0

Pido disculpas por este comentario de dos años después, pero estoy buscando una solución similar, y quería mencionar que la solución anterior no funciona (AFAIK) en casos como WORD o ACRO-READER que pueden tener más de un documento abierto en el escritorio. En ese caso, parece que solo la ventana superior se muestra como una aplicación que utiliza el método anterior. Si me equivoco, me disculpo, pero suponiendo que tengo razón, me gustaría saber cómo enumerar todas las ventanas, incluso si provienen del mismo proceso subyacente (como acrord o word). –

+0

@Ed. Sí, esto enumera los procesos, pero esas aplicaciones solo ejecutan un solo proceso. No tiene importancia que el proceso administre múltiples ventanas de nivel superior. Puede enumerar ventanas de nivel superior utilizando la función ['EnumWindows'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633497.aspx). Llame a esta función y especifique un puntero a una función de devolución de llamada. La función de devolución de llamada se llamará una vez para cada ventana de nivel superior en la pantalla. –

Cuestiones relacionadas