これは思ったほど悪意はありません。ウィンドウの現在のサイズを取得したいのであって、ウィンドウの内容を確認したいのではありません。目的は、他のすべてのウィンドウがフルスクリーンの場合、私もそのように起動する必要があることを理解することです。または、解像度が非常に高いにもかかわらず、他のすべてのプロセスが 800x600 しかない場合、それはおそらくユーザーが望んでいることです。彼らが持っている他のすべてのものに合わせて私のウィンドウのサイズを変更するのに、なぜ彼らに時間とエネルギーを浪費させるのでしょうか? 私は主に Windows 開発者ですが、これを行うためのクロス プラットフォームの方法があったとしても、少なくとも動揺することはありません。
Brian Paden
質問する
12205 次
5 に答える
12
WindowMover の記事とNattee Niparnan のブログ投稿からのヒントを使用して、これを作成することができました。
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 Extensions for Python モジュールが必要です。
GetWindowRect
編集:よりも正しい結果が得られることを発見しましたGetClientRect
。ソースが更新されました。
于 2008-09-30T10:02:38.250 に答える
9
私はAutoItの大ファンです。それらには、Python からほとんどの機能を使用できる COM バージョンがあります。
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
于 2008-09-30T23:30:58.247 に答える
2
Python 用 Windows 拡張機能のwin32gui
モジュールを確認してください。探している機能の一部が提供される場合があります。
于 2008-09-30T07:35:04.267 に答える