pywin32:如何从进程句柄获取窗口句柄,反之亦然

时间:2017-06-24 11:14:59

标签: winapi pywin32

两个用例:

  1. 枚举窗口,然后获取每个窗口的进程句柄

  2. 枚举进程,然后获取每个进程的主应用程序窗口句柄

1 个答案:

答案 0 :(得分:6)

  

枚举窗口,然后获取每个窗口的进程句柄

您需要这些API:

  

枚举进程,然后获取主应用程序窗口句柄   对于每个过程

您需要这些API:

通过使用EnumWindows()过滤GetWindowThreadProcessId()的结果,您可以获得属于给定流程的所有窗口。

确定主窗口可能很棘手,因为没有单一窗口样式可以将窗口指定为主窗口。毕竟,应用程序可能包含多个 主窗口

您可以做的最好的事情是使用与taskbar uses to determine application windows相同的规则,因为用户认为主窗口

  

只要有应用程序,Shell就会在任务栏上放置一个按钮   创建一个无主窗口 - 即一个没有窗口的窗口   parent,具有相应的扩展样式位。

     

确保窗口按钮是   放在任务栏上,用。创建一个无主窗口   WS_EX_APPWINDOW扩展样式。防止窗口按钮   被放置在任务栏上,用。创建无主窗口   WS_EX_TOOLWINDOW扩展样式。作为替代方案,您可以创建一个   隐藏窗口并使此隐藏窗口成为您可见的所有者   窗口。

使用GetParent()GetWindowLong()根据这些规则确定具有正确窗口样式的无主窗口。