[英]Python win32api get “stack” of windows
我正在寻找一种方法来找出在我的桌面上打开了哪些订单窗口,以便告诉用户哪些窗口可见。
说,按顺序,我打开一个最大化的chrome窗口,一个最大化的notepad ++窗口,然后打开一个仅覆盖屏幕一小部分的命令提示符。 有没有一种使用win32api(或可能的其他库)的方法可以告诉我打开的窗口堆栈,以便我可以确定窗口尺寸并找出可见的内容? 我已经知道如何获取具有焦点的窗口和顶级窗口,但是我正在寻找更多的信息。
在上面提到的示例中,我将返回完整的命令提示符可见,但在不可见的地方,例如,notepad ++窗口可见。 chrome窗口的任何部分都不可见。
import win32gui
import win32con
def get_windows():
def sort_windows(windows):
sorted_windows = []
# Find the first entry
for window in windows:
if window["hwnd_above"] == 0:
sorted_windows.append(window)
break
else:
raise(IndexError("Could not find first entry"))
# Follow the trail
while True:
for window in windows:
if sorted_windows[-1]["hwnd"] == window["hwnd_above"]:
sorted_windows.append(window)
break
else:
break
# Remove hwnd_above
for window in windows:
del(window["hwnd_above"])
return sorted_windows
def enum_handler(hwnd, results):
window_placement = win32gui.GetWindowPlacement(hwnd)
results.append({
"hwnd":hwnd,
"hwnd_above":win32gui.GetWindow(hwnd, win32con.GW_HWNDPREV), # Window handle to above window
"title":win32gui.GetWindowText(hwnd),
"visible":win32gui.IsWindowVisible(hwnd) == 1,
"minimized":window_placement[1] == win32con.SW_SHOWMINIMIZED,
"maximized":window_placement[1] == win32con.SW_SHOWMAXIMIZED,
"rectangle":win32gui.GetWindowRect(hwnd) #(left, top, right, bottom)
})
enumerated_windows = []
win32gui.EnumWindows(enum_handler, enumerated_windows)
return sort_windows(enumerated_windows)
if __name__ == "__main__":
windows = get_windows()
for window in windows:
print(window)
print()
# Pretty print
for window in windows:
if window["title"] == "" or not window["visible"]:
continue
print(window)
Microsoft MSDN使用GetWindow()和GW_HWNDNEXT https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms633515(v=vs.85).aspx在zorder信息方面有很好的技巧
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.