2016-07-29 9 views
0

私は、どのウィンドウのどの部分がユーザーに見えるかを知るために、デスクトップ上でどのような順序のウィンドウが開いているかを調べる方法を探しています。Pythonのwin32apiがウィンドウの「スタック」を取得する

私は、最大化されたクロムウィンドウ、最大化されたメモ帳++ウィンドウ、次に画面の小さな部分のみをカバーするコマンドプロンプトを開きます。 win32api(または他のライブラリ)を使用してウィンドウのスタックを開いて、ウィンドウの大きさを確認し、表示されているものを見つける方法がありますか?私はすでに、どのウィンドウにフォーカスとトップレベルウィンドウが得られるかを知っていますが、それ以上の情報を探しています。

上記の例では、完全なコマンドプロンプトが表示されますが、表示されていない場所ではnotepad ++ウィンドウが表示されます。クロムウィンドウのどの部分も表示されません。

答えて

0

これは、ウィンドウがオーバーレイされているかどうかを判断するロジックはまだありませんが、タイトル、可視性、最小化、サイズ、次のウィンドウハンドルの情報を持つ既存のウィンドウの辞書を返します。

import win32gui 
import win32con 


def enum_handler(hwnd, results): 
    results[hwnd] = { 
     "title":win32gui.GetWindowText(hwnd), 
     "visible":win32gui.IsWindowVisible(hwnd), 
     "minimized":win32gui.IsIconic(hwnd), 
     "rectangle":win32gui.GetWindowRect(hwnd), #(left, top, right, bottom) 
     "next":win32gui.GetWindow(hwnd, win32con.GW_HWNDNEXT) # Window handle to below window 
    } 


def get_windows(): 
    enumerated_windows = {} 
    win32gui.EnumWindows(enum_handler, enumerated_windows) 
    return enumerated_windows 


if __name__ == "__main__": 
    windows = get_windows() 

    for window_handle in windows: 
     if windows[window_handle]["title"] is not "": 
      print "{}, {}, {}, {}".format(windows[window_handle]["minimized"], 
              windows[window_handle]["rectangle"], 
              windows[window_handle]["next"], 
              windows[window_handle]["title"]) 

マイクロソフトMSDNはは、GetWindow()とGW_HWNDNEXT https://msdn.microsoft.com/en-us/library/windows/desktop/ms633515(v=vs.85).aspx

とZORDER情報に良いarticeを持っています
関連する問題