首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用win32gui列出所有窗口

使用win32gui列出所有窗口
EN

Stack Overflow用户
提问于 2021-10-25 17:22:15
回答 1查看 470关注 0票数 0

我正在尝试列出使用Python和win32gui模块的Microsoft Windows10的所有窗口。问题是,在我的理解中,也有一些列出的进程没有窗口。

在仅打开Chrome和PyCharm的情况下运行此代码时

代码语言:javascript
复制
import win32gui

def callback(hwnd, extra):
    if win32gui.IsWindowVisible(hwnd):
        print(f"window text: '{win32gui.GetWindowText(hwnd)}'")

win32gui.EnumWindows(callback, None)

它返回this:

代码语言:javascript
复制
window text: ''
window text: ''
window text: 'PyCharm'
window text: 'Google Chrome'
window text: 'Einstellungen'
window text: ''
window text: 'Microsoft Store'
window text: 'Microsoft Store'
window text: 'Microsoft Text Input Application'
window text: ''
window text: ''
window text: ''
window text: ''
window text: ''
window text: 'Einstellungen'
window text: ''
window text: ''
window text: ''
window text: 'Program Manager'

我正在研究GetWindowLong函数,但是我找不到任何可以让我清楚地区分窗口的东西。

我真的会非常感谢你的任何想法。

EN

回答 1

Stack Overflow用户

发布于 2021-10-25 17:59:03

枚举窗口时,还会得到用户看不到窗口的进程。例如,如果您打开了一个chrome窗口,您将同时获得每个子进程的句柄。

来自IsWindowVisible()上的MSDN

如果指定的窗口、其父窗口、其父窗口等具有WS_VISIBLE样式,则返回值为非零。否则,返回值为零。

参考:https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-iswindowvisible

根据您的用例,您有一些选项:

  • 您可以使用GetClientRect() (表示工作空间)或GetWindowRect() (表示整个窗口空间,包括投影等窗口效果),并检查窗口是否实际占用了屏幕上的空间。

请参阅:http://timgolden.me.uk/pywin32-docs/win32gui__GetClientRect_meth.html (win32GUI Documentation) https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getclientrect (MSDN)

http://timgolden.me.uk/pywin32-docs/win32gui__GetWindowRect_meth.html (win32GUI文档) https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindowrect (MSDN)

  • 您可以检查窗口样式中的WS_CHILD标志,或者使用GetParent()查看窗口是否是子窗口,如果是,则将其排除。您可能需要包装

请参阅:http://timgolden.me.uk/pywin32-docs/win32gui__GetParent_meth.html (win32GUI Documentation) https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getparent (MSDN) https://docs.microsoft.com/en-us/windows/win32/winmsg/window-styles (MSDN)

  • 您可以简单地检查窗口的标题是否至少包含一个字符,这将允许您拥有可见的子窗口的HWND。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69712306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档