Winapi pywin32:如何从进程句柄获取窗口句柄,反之亦然
两个用例:Winapi pywin32:如何从进程句柄获取窗口句柄,反之亦然,winapi,pywin32,Winapi,Pywin32,两个用例: 枚举窗口,然后获取每个窗口的进程句柄 枚举进程,然后获取每个进程的主应用程序窗口句柄 枚举窗口,然后获取每个窗口的进程句柄 您需要这些API: 枚举所有顶级窗口(即没有子窗口或控件) 从窗口句柄获取进程ID 从进程ID获取进程句柄的步骤 枚举进程,然后获取主应用程序窗口句柄 对于每个过程 您需要这些API: 枚举所有进程 使用argentGWL_样式获取和GWL_EXSTYLE获取 确定无主窗口的步骤 通过使用GetWindowThreadProcessId()过滤EnumW
- 枚举所有顶级窗口(即没有子窗口或控件)
- 从窗口句柄获取进程ID
- 从进程ID获取进程句柄的步骤
- 枚举所有进程
- 使用argent
获取和GWL_样式
获取GWL_EXSTYLE
- 确定无主窗口的步骤
GetWindowThreadProcessId()
过滤EnumWindows()
的结果,可以获得属于给定进程的所有窗口
确定主窗口可能很棘手,因为没有单一的窗口样式将窗口指定为主窗口。毕竟,一个应用程序可能有多个主窗口
您所能做的最好是使用与相同的规则,因为这是用户认为的主窗口:
每当应用程序启动时,Shell会在任务栏上放置一个按钮
创建一个无主窗口,即没有主窗口的窗口
具有适当扩展样式位的父级和
确保“窗口”按钮处于打开状态
放置在任务栏上,使用
WS_EX_APPWINDOW扩展样式。防止窗口按钮
放置在任务栏上,使用
WS_EX_TOOLWINDOW扩展样式。或者,您可以创建一个
隐藏窗口,并使此隐藏窗口的所有者可见
窗户
使用GetParent()
和GetWindowLong()
根据这些规则确定具有正确窗口样式的无主窗口