Versión: 2.x, 3.x.
Descargas: alwaysontop.zip.
Simple código que utiliza las funciones de la API de Windows FindWindow (en su versión Unicode, FindWindowW) y SetWindowPos para, respectivamente, obtener el número identificador de una ventana específica (determinada a partir del título) y luego enviarla y mantenerla al frente, por más que pierda el foco.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# alwaysontop.py
#
# Copyright 2014 Recursos Python - www.recursospython.com
#
from ctypes import c_void_p, windll
from platform import python_version_tuple
from sys import stdin
# Constantes.
SWP_NOMOVE = 0x0002
SWP_NOSIZE = 0x0001
def main():
# Compatibilidad entre versiones.
py_version = int(python_version_tuple()[0])
prompt = raw_input if py_version == 2 else input
# Nombre de la ventana.
window_name = ""
# Identificador.
handle = 0
while not window_name or not handle:
window_name = prompt("Nombre de la ventana: ")
# Convertir a Unicode en Python 2.
if py_version == 2:
window_name = window_name.decode(stdin.encoding)
handle = windll.user32.FindWindowW(None, window_name)
# Enviar ventana al frente.
windll.user32.SetWindowPos(handle, c_void_p(-1), 0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE)
if __name__ == "__main__":
main()
A continuación, un código análogo que utiliza el módulo pywin32:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# alwaysontop_pywin32.py
#
# Copyright 2014 Recursos Python - www.recursospython.com
#
from platform import python_version_tuple
from sys import stdin
from win32con import SWP_NOMOVE, SWP_NOSIZE
from win32gui import FindWindow, SetWindowPos
def main():
py_version = int(python_version_tuple()[0])
prompt = raw_input if py_version == 2 else input
window_name = ""
handle = 0
while not window_name or not handle:
window_name = prompt("Nombre de la ventana: ")
if py_version == 2:
window_name = window_name.decode(stdin.encoding)
handle = FindWindow(None, window_name)
SetWindowPos(handle, -1, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE)
if __name__ == "__main__":
main()
Curso online 👨💻
¡Ya lanzamos el curso oficial de Recursos Python en Udemy!
Un curso moderno para aprender Python desde cero con programación orientada a objetos, SQL y tkinter en 2024.
Consultoría 💡
Ofrecemos servicios profesionales de desarrollo y capacitación en Python a personas y empresas. Consultanos por tu proyecto.