枚举窗口,然后获取每个窗口的进程句柄
您需要这些API:
win32gui.EnumWindows() 枚举所有顶级窗口(即没有子窗口控件)win32process.GetWindowThreadProcessId() 从窗口句柄获取进程IDwin32api.OpenProcess() 从进程ID获取进程句柄枚举进程,然后获取每个进程的主应用程序窗口句柄
您需要这些API:
win32process.EnumProcesses() 列举所有进程win32api.GetWindowLong()与arguent GWL_STYLE获取窗口样式并GWL_EXSTYLE获得扩展窗口样式win32gui.GetParent() 确定无主窗口通过筛选的结果,EnumWindows()使用GetWindowThreadProcessId()即可获得属于特定进程的所有窗口.
确定主窗口可能很棘手,因为没有单一的窗口样式可以将窗口指定为主窗口.毕竟,应用程序可能有多个 主窗口.
您可以做的最好是使用任务栏用于确定应用程序窗口的相同规则,因为这是用户认为的主窗口:
每当应用程序创建一个无主窗口时,Shell就会在任务栏上放置一个按钮,即一个没有父窗口且具有相应扩展样式位的窗口.
要确保窗口按钮位于任务栏上,请使用WS_EX_APPWINDOW扩展样式创建无主窗口.要防止窗口按钮放在任务栏上,请使用WS_EX_TOOLWINDOW扩展样式创建无主窗口.作为替代方案,您可以创建隐藏窗口并使此隐藏窗口成为可见窗口的所有者.
根据这些规则使用GetParent()和GetWindowLong()确定具有正确窗口样式的无主窗口.
| 归档时间: |
|
| 查看次数: |
3211 次 |
| 最近记录: |