python - tutorial - pywin32 windows 10
Obtener otros tamaƱos de ventana de procesos en ejecuciĆ³n en Python (3)
Esto no es tan malicioso como suena, quiero obtener el tamaño actual de sus ventanas, no mirar lo que hay en ellas. El propósito es descubrir que si cada otra ventana es a pantalla completa, entonces debería comenzar así también. O si todos los otros procesos son solo de 800x600 a pesar de que hay una gran resolución, eso es probablemente lo que el usuario quiere. ¿Por qué hacerles perder tiempo y energía cambiando el tamaño de mi ventana para que coincida con todas las 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 de plataforma cruzada para hacer esto.
Consulte el módulo win32gui
en las extensiones de Windows para Python. Puede proporcionar algunas de las funciones que está buscando.
Soy un gran fanático de AutoIt . Tienen una versión COM que le permite usar la mayoría de sus funciones desde 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
Usando sugerencias del artículo de WindowMover y la publicación del blog de Nattee Niparnan, pude 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 módulo Win32 Extensions for Python para que esto funcione.
EDIT: descubrí que GetWindowRect
proporciona más resultados correctos que GetClientRect
. La fuente ha sido actualizada.