两个用例:
枚举窗口,然后获取每个窗口的进程句柄
枚举进程,然后获取每个进程的主应用程序窗口句柄
枚举窗口,然后获取每个窗口的进程句柄
您需要这些 API:
-
win32gui.EnumWindows() http://timgolden.me.uk/pywin32-docs/win32gui__EnumWindows_meth.html枚举所有顶级窗口(即没有子窗口,也称为控件)
-
win32process.GetWindowThreadProcessId() http://timgolden.me.uk/pywin32-docs/win32process__GetWindowThreadProcessId_meth.html从窗口句柄获取进程ID
-
win32api.OpenProcess() http://timgolden.me.uk/pywin32-docs/win32api__OpenProcess_meth.html从进程ID获取进程句柄
枚举进程然后获取主应用程序窗口句柄
对于每个过程
您需要这些 API:
-
win32process.EnumProcesses() http://timgolden.me.uk/pywin32-docs/win32process__EnumProcesses_meth.html枚举所有进程
-
win32api.GetWindowLong() http://timgolden.me.uk/pywin32-docs/win32api__GetWindowLong_meth.html有论点
GWL_STYLE
to get 窗户样式 https://learn.microsoft.com/en-us/windows/win32/winmsg/window-styles and GWL_EXSTYLE
to get 扩展窗口样式 https://learn.microsoft.com/en-us/windows/win32/shell/taskbar#managing-taskbar-buttons
-
win32gui.GetParent() http://timgolden.me.uk/pywin32-docs/win32gui__GetParent_meth.html确定无主窗口
通过过滤结果EnumWindows()
using GetWindowThreadProcessId()
您可以获得属于给定进程的所有窗口。
确定主窗口可能会很棘手,因为没有单一的窗口样式可以将窗口指定为主窗口。毕竟,应用程序可能具有multiple 主窗口.
你能做的最好的事情就是使用与taskbar https://learn.microsoft.com/en-us/windows/win32/shell/taskbar用于确定应用程序窗口,因为这就是用户所感知的主窗口:
每当应用程序启动时,Shell 都会在任务栏上放置一个按钮
创建一个无主窗口——即一个没有
父级并且具有适当的扩展样式位。
确保窗口按钮是
放置在任务栏上,创建一个无主窗口
WS_EX_APPWINDOW 扩展样式。为了防止窗口按钮
放置在任务栏上,使用以下命令创建无主窗口
WS_EX_TOOLWINDOW 扩展样式。作为替代方案,您可以创建一个
隐藏窗口并使该隐藏窗口成为可见窗口的所有者
窗户。
Use GetParent()
and GetWindowLong()
根据这些规则确定具有正确窗口样式的无主窗口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)