Erhalten Sie andere laufende Prozesse Fenstergrößen in Python
Frage
Das ist nicht so schädlich ist, wie es klingt, möchte ich die aktuelle Größe der Fenster bekommen, um nicht zu sehen, was in ihnen ist. Der Zweck ist es, herauszufinden, dass, wenn alle anderen Fenster Vollbild wird dann sollte ich auch so starten. Oder, wenn alle anderen Prozesse sind nur 800x600 obwohl es eine große Auflösung ist, dann ist das wahrscheinlich das, was die Nutzer wollen. Warum machen sie meine Fenster verschwenden Zeit und Energie Ändern der Größe alle anderen passen sie haben? Ich bin in erster Linie ein Windows-devoloper aber es würde mich nicht im geringsten aufgeregt, wenn es ein Cross-Plattform-Weg ist, dies zu tun.
Lösung
Hinweise von WindowMover Artikel und Nattee Niparnan Blog-Post ich dies zu schaffen verwaltet:
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
Sie müssen die Win32-Erweiterungen für Python-Modul für diese arbeiten.
EDIT: Ich entdeckte, dass GetWindowRect
richtigere Ergebnisse als GetClientRect
gibt. Quelle wurde aktualisiert.
Andere Tipps
Ich bin ein großer Fan von AutoIt . Sie haben eine COM-Version, die Sie die meisten ihrer Funktionen von Python verwenden.
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
Schauen Sie sich die win32gui
Modul in den Windows-Erweiterungen für Python. Es kann einen Teil der Funktionalität bieten Sie suchen.