Question

Ce n’est pas aussi malveillant que cela puisse paraître, je veux connaître la taille actuelle de leurs fenêtres, et non regarder ce qu’elles contiennent. Le but est de comprendre que si toutes les autres fenêtres sont en plein écran, je devrais aussi démarrer ainsi. Ou si tous les autres processus ne mesurent que 800 x 600 malgré une résolution énorme, c'est probablement ce que l'utilisateur souhaite. Pourquoi leur faire perdre du temps et de l'énergie en redimensionnant ma fenêtre pour l'adapter à toutes les autres? Je suis avant tout un développeur Windows, mais cela ne me dérangerait pas du tout s'il y avait un moyen multiplateforme de le faire.

Était-ce utile?

La solution

Utilisation des astuces de article de WindowMover et Article de blog de Nattee Niparnan J'ai réussi à créer ceci:

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

Vous avez besoin du module Win32 Extensions for Python pour que cela fonctionne.

EDIT: j'ai découvert que GetWindowRect donne des résultats plus corrects que GetClientRect . La source a été mise à jour.

Autres conseils

Je suis un grand fan de AutoIt . Ils ont une version COM qui vous permet d’utiliser la plupart de leurs fonctions depuis 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

Découvrez le win32gui dans les extensions Windows pour Python. Il peut fournir certaines des fonctionnalités que vous recherchez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top