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

ste*_*eve 4 winapi pywin32

两个用例:

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

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

zet*_*t42 7

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

您需要这些API:

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

您需要这些API:

通过筛选的结果,EnumWindows()使用GetWindowThreadProcessId()即可获得属于特定进程的所有窗口.

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

您可以做的最好是使用任务栏用于确定应用程序窗口的相同规则,因为这是用户认为的主窗口:

每当应用程序创建一个无主窗口时,Shell就会在任务栏上放置一个按钮,即一个没有父窗口且具有相应扩展样式位的窗口.

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

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