Получить размеры других запущенных процессов в Python - PullRequest
7 голосов
/ 30 сентября 2008

Это не так злобно, как кажется, я хочу узнать текущий размер их окон, а не смотреть, что в них. Цель состоит в том, чтобы выяснить, что если каждое другое окно полноэкранное, то я тоже должен запускаться таким же образом. Или, если все остальные процессы имеют разрешение 800х600, несмотря на огромное разрешение, то это, вероятно, то, что хочет пользователь. Зачем заставлять их тратить время и энергию, изменяя размеры моего окна, чтобы соответствовать всем остальным? Я в первую очередь разработчик Windows, но меня это не расстроило бы, если бы существовал кроссплатформенный способ сделать это.

Ответы [ 3 ]

12 голосов
/ 30 сентября 2008

Использование подсказок из Статьи WindowMover и Публикация в блоге Натти Нипарнан Мне удалось создать это:

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

Вам нужен модуль расширения Win32 для Python , чтобы это работало.

EDIT: я обнаружил, что GetWindowRect дает более правильные результаты, чем GetClientRect. Источник обновлен.

8 голосов
/ 01 октября 2008

Я большой поклонник AutoIt . У них есть версия COM, которая позволяет вам использовать большинство их функций из 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
2 голосов
/ 30 сентября 2008

Проверьте модуль win32gui в расширениях Windows для Python. Это может обеспечить некоторые функции, которые вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...