質問

これは見た目ほど悪意のあるものではありません。ウィンドウの現在のサイズを取得したいのです。ウィンドウの内容を確認したくないのです。目的は、他のすべてのウィンドウがフルスクリーンである場合、私もそのように起動する必要があることを把握することです。または、巨大な解像度があるにもかかわらず他のすべてのプロセスが800x600しかない場合、それはおそらくユーザーが望むものです。なぜ彼らが時間とエネルギーを無駄にして、彼らが持っている他のすべてのものと一致するように私のウィンドウのサイズを変更するのですか?私は主にWindows開発者ですが、これを行うクロスプラットフォームの方法があったとしても、少なくとも私を混乱させることはありません。

役に立ちましたか?

解決

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 よりも正しい結果を提供することを発見しました。ソースが更新されました。

他のヒント

私は 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

win32gui モジュールをご覧くださいPython用のWindows拡張。探している機能の一部を提供する場合があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top