Получить размеры окон других запущенных процессов в Python
Вопрос
Это не так злонамеренно, как кажется, я хочу узнать текущий размер их окон, а не смотреть, что в них находится.Цель состоит в том, чтобы выяснить, что если все остальные окна полноэкранные, то и я должен запускаться так же.Или, если все остальные процессы имеют разрешение всего 800x600, несмотря на огромное разрешение, то, вероятно, это то, что хочет пользователь.Зачем заставлять их тратить время и энергию на изменение размера моего окна, чтобы оно соответствовало всем остальным, которые у них есть?Я в первую очередь занимаюсь разработкой Windows, но меня нисколько не расстроило бы, если бы существовал кроссплатформенный способ сделать это.
Решение
Используя подсказки из Статья 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 чтобы это работало.
РЕДАКТИРОВАТЬ:Я обнаружил это GetWindowRect
дает более правильные результаты, чем GetClientRect
.Источник обновлен.
Другие советы
Я большой поклонник АвтоИт.У них есть версия 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
Проверьте win32gui
модуль в расширениях Windows для Python.Он может предоставить некоторые функции, которые вы ищете.