2012-06-13 31 views
5

¿Alguien puede decirme cómo identificar un proceso en segundo plano particular (es decir, que ya se está ejecutando la aplicación) y ponerlo en primer plano? Por ejemplo, si una aplicación de Bloc de notas se ejecuta en segundo plano, cuando ejecuto mi aplicación WIN32, debería identificar la aplicación Bloc de notas y el bloc de notas debería aparecer o aparecer en primer plano.Para identificar el proceso en segundo plano y ponerlo en primer plano en C++ WIN32

Intenté la función SwitchToThisWindow(), pero funciona como Alt + pestaña. No identificará el proceso de fondo.

Pls me sugieren guía paso a paso para este ..

Gracias ..

+4

Suena como un trabajo para 'EnumWindows' y' SetForegroundWindow'. – chris

+1

* En una época en la que un sistema de Windows era devastado por procesos en primer plano, había una función que se defendía ... ¡Y su nombre era 'SetForegroundWindow'! * – Default

+0

Ya, SetForegroundWindow aplicará mi ventana al principio. Pero, ¿hay alguna manera de identificar el proceso de fondo? – Guru

Respuesta

3

pero ¿hay alguna manera de identificar el proceso en segundo plano

Esa es una noción cáscara de Unix, Windows no lo tiene. En este momento tengo 10 procesos de "fondo" que han creado ventanas que no están en primer plano, otras 50 buenas que no tienen. Ninguno de ellos es EL proceso de fondo, todos son igualmente de fondo. Normalmente, haga clic en el botón de la barra de tareas de una ventana o presione Alt + Tab para cambiar uno de ellos al primer plano. O llame a SetForegroundWindow() en el código.

+0

Supuse que estaban después del proceso de "fondo" de una ventana determinada. * Las ventanas nix no están tan estrechamente unidas a un proceso (como puede ser en otra máquina :) – Deanna

3

No está claro lo que entendemos por 'proceso de fondo', pero aquí hay algunas ideas:

Uso EnumWindowspara conseguir que todos los HWNDs de alto nivel sobre el escritorio. Esto incluirá un montón de cosas que no quieres que tendrás que filtrar. Te recomendamos que juegues con Spy ++ para ver cómo es el árbol HWND y qué tipo de HWND encontrarás aquí:

Desde este conjunto, querrás filtrar o ignorar HWND invisibles (usa IsWindowVisible o busca el estilo WS_VISIBLE).

También filtra las ventanas que tienen configurado WS_POPUP, como información sobre herramientas, ventanas emergentes de menú, barras de herramientas flotantes y similares.

Para filtrar la ventana actualmente activa, (si aún no la conoce) use GetGUIThreadInfo con idThread = 0; GUIHREADINFO.hwndActive devuelve la ventana activa, por lo que cualquier HWND de nivel superior que no sea una ventana inactiva.

Si está buscando ventanas minimizadas, puede detectarlas usando IsIconic(hwnd).

Finalmente, cuando haya encontrado una ventana que considera 'fondo', puede usar GetWindowText para obtener el título, o GetWindowThreadProcessId para obtener la ID del proceso.

Cuestiones relacionadas