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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top