Saltar al contenido

Windows 7: ¿cómo llevar una ventana al frente sin importar qué otra ventana tenga el foco?

Solución:

No me gustan estas sugerencias de uso win32gui porque no puedes instalarlo fácilmente a través de pip. Entonces esta es mi solución:

Primero, instale pywinauto vía pip. Si está en Python 2.7.9 o una versión más reciente en la rama 2, o Python 3.4.0 o una versión más nueva de la rama 3, pip ya está instalado. Para todos los demás, actualice Python para obtenerlo (o puede descargarlo e instalarlo manualmente ejecutando este script, si debe ejecutar una versión anterior de Python).

Simplemente ejecute esto desde la línea de comando (no desde dentro de Python):

pip install pywinauto

A continuación, importe lo que necesita de pywinauto:

from pywinauto.findwindows    import find_window
from pywinauto.win32functions import SetForegroundWindow

Finalmente, es solo una línea real:

SetForegroundWindow(find_window(title="taskeng.exe"))

He tenido un código que se ha estado ejecutando durante años, que se remonta a Windows 95. Al hacer doble clic en el ícono de la bandeja del sistema de aplicaciones, siempre usé funciones de API de Win32 como BringWindowToTop y SetForegroundWindow para traer las ventanas de mi aplicación al primer plano. Todo esto dejó de funcionar como se esperaba en Windows 7, donde mi ventana de entrada terminaría detrás de otras ventanas y el icono de la ventana parpadearía en la barra de estado. El “trabajo alrededor” que se me ocurrió fue este; y parece funcionar en todas las versiones de Windows.

//-- show the window as you normally would, and bring window to foreground.
//   for example;
::ShowWindow(hWnd,SW_SHOW); 
::BringWindowToTop(hWnd);
::SetForegroundWindow(hWnd);

//-- on Windows 7, this workaround brings window to top
::SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,0,0, SWP_NOMOVE | SWP_NOSIZE);
::SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE);
::SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);

Según nspire, probé su solución con python 2.7 y W8, y funciona a las mil maravillas, incluso si la ventana está minimizada *.

win32gui.ShowWindow(HWND, win32con.SW_RESTORE)
win32gui.SetWindowPos(HWND,win32con.HWND_NOTOPMOST, 0, 0, 0, 0, win32con.SWP_NOMOVE + win32con.SWP_NOSIZE)  
win32gui.SetWindowPos(HWND,win32con.HWND_TOPMOST, 0, 0, 0, 0, win32con.SWP_NOMOVE + win32con.SWP_NOSIZE)  
win32gui.SetWindowPos(HWND,win32con.HWND_NOTOPMOST, 0, 0, 0, 0, win32con.SWP_SHOWWINDOW + win32con.SWP_NOMOVE + win32con.SWP_NOSIZE)
  • Originalmente fue si la ventana no esta minimizada, pero gracias a Quiencomentario de win32gui.ShowWindow(HWND, win32con.SW_RESTORE), ahora funciona en todas las situaciones.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *