win32file tutorial pyhook for extensions python windows winapi pywin32

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.