Ottieni altre dimensioni delle finestre dei processi in esecuzione in Python
Domanda
Non è così dannoso come sembra, voglio ottenere le dimensioni attuali delle loro finestre, non guardare cosa c'è dentro. Lo scopo è capire che se ogni altra finestra è a schermo intero, dovrei avviarla anch'io. O se tutti gli altri processi sono solo 800x600 nonostante ci sia una risoluzione enorme, questo è probabilmente ciò che l'utente desidera. Perché farli perdere tempo ed energia ridimensionando la mia finestra per abbinare tutti gli altri che hanno? Sono principalmente un devoloper di Windows ma non mi turberebbe minimamente se ci fosse un modo multipiattaforma per farlo.
Soluzione
Uso dei suggerimenti di articolo di WindowMover e Post del blog di Nattee Niparnan Sono riuscito a creare questo:
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
È necessario il Estensioni Win32 per il modulo Python per funzionare.
EDIT: ho scoperto che GetWindowRect
fornisce risultati più corretti di GetClientRect
. La fonte è stata aggiornata.
Altri suggerimenti
Sono un grande fan di AutoIt . Hanno una versione COM che ti consente di utilizzare la maggior parte delle loro funzioni da 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
Dai un'occhiata al win32gui
in in le estensioni di Windows per Python. Potrebbe fornire alcune delle funzionalità che stai cercando.