Pergunta

Isto não é tão maliciosa quanto parece, eu quero obter o tamanho atual de suas janelas, não olhar para o que está neles. O objetivo é descobrir que, se todos os outros janela é tela cheia, então eu deveria iniciar-se assim também. Ou se todos os outros processos são apenas 800x600 apesar de haver uma resolução enorme, então isso é provavelmente o que o usuário quer. Por que fazê-los perder tempo e energia redimensionar minha janela para coincidir com todos os outros que eles têm? Eu sou essencialmente um devoloper Windows, mas ele não iria me perturbar, no mínimo, se houvesse uma maneira de plataforma cruzada para fazer isso.

Foi útil?

Solução

Usando referências de WindowMover artigo e post do Nattee Niparnan eu consegui criar esta:

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

Você precisa do Win32 extensões para Python módulo para que isso funcione.

EDIT: eu descobri que GetWindowRect dá resultados mais corretos do que GetClientRect. Fonte foi atualizado.

Outras dicas

Eu sou um grande fã de AutoIt . Eles têm uma versão COM que permite que você use a maioria de suas funções a partir 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

Confira o win32gui módulo nas extensões do Windows para Python. Ele pode fornecer algumas das funcionalidades que você está procurando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top