Obtenga otros tamaños de ventana de procesos en ejecución en Python
Pregunta
Esto no es tan malicioso como parece, quiero obtener el tamaño actual de sus ventanas, no mirar lo que hay en ellas. El propósito es descubrir que si todas las demás ventanas son de pantalla completa, también debería comenzar así. O si todos los demás procesos son solo de 800x600 a pesar de que hay una gran resolución, entonces eso es probablemente lo que el usuario quiere. ¿Por qué hacer que pierdan tiempo y energía cambiando el tamaño de mi ventana para que coincida con todos los demás que tienen? Principalmente soy un desarrollador de Windows, pero no me molestaría en lo más mínimo si hubiera una forma multiplataforma de hacer esto.
Solución
Uso de sugerencias de Artículo de WindowMover y Publicación en el blog de Nattee Niparnan Logré crear esto:
import win32con
import win32gui
def isRealWindow(hWnd):
'''Return True iff given window is a real Windows application window.'''
if not win32gui.IsWindowVisible(hWnd):
return False
if win32gui.GetParent(hWnd) != 0:
return False
hasNoOwner = win32gui.GetWindow(hWnd, win32con.GW_OWNER) == 0
lExStyle = win32gui.GetWindowLong(hWnd, win32con.GWL_EXSTYLE)
if (((lExStyle & win32con.WS_EX_TOOLWINDOW) == 0 and hasNoOwner)
or ((lExStyle & win32con.WS_EX_APPWINDOW != 0) and not hasNoOwner)):
if win32gui.GetWindowText(hWnd):
return True
return False
def getWindowSizes():
'''
Return a list of tuples (handler, (width, height)) for each real window.
'''
def callback(hWnd, windows):
if not isRealWindow(hWnd):
return
rect = win32gui.GetWindowRect(hWnd)
windows.append((hWnd, (rect[2] - rect[0], rect[3] - rect[1])))
windows = []
win32gui.EnumWindows(callback, windows)
return windows
for win in getWindowSizes():
print win
Necesita el Extensiones Win32 para el módulo Python para que esto funcione.
EDITAR: descubrí que GetWindowRect
da resultados más correctos que GetClientRect
. La fuente ha sido actualizada.
Otros consejos
Soy un gran admirador de AutoIt . Tienen una versión COM que le permite utilizar la mayoría de sus funciones de Python.
import win32com.client
oAutoItX = win32com.client.Dispatch( "AutoItX3.Control" )
oAutoItX.Opt("WinTitleMatchMode", 2) #Match text anywhere in a window title
width = oAutoItX.WinGetClientSizeWidth("Firefox")
height = oAutoItX.WinGetClientSizeHeight("Firefox")
print width, height
Consulte el win32gui
módulo en Las extensiones de Windows para Python. Puede proporcionar algunas de las funciones que está buscando.