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

Winapi pywin32:如何从进程句柄获取窗口句柄,反之亦然,winapi,pywin32,Winapi,Pywin32,两个用例: 枚举窗口,然后获取每个窗口的进程句柄 枚举进程,然后获取每个进程的主应用程序窗口句柄 枚举窗口,然后获取每个窗口的进程句柄 您需要这些API: 枚举所有顶级窗口(即没有子窗口或控件) 从窗口句柄获取进程ID 从进程ID获取进程句柄的步骤 枚举进程,然后获取主应用程序窗口句柄 对于每个过程 您需要这些API: 枚举所有进程 使用argentGWL_样式获取和GWL_EXSTYLE获取 确定无主窗口的步骤 通过使用GetWindowThreadProcessId()过滤EnumW

两个用例:

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

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

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

    您需要这些API:

    • 枚举所有顶级窗口(即没有子窗口或控件)
    • 从窗口句柄获取进程ID
    • 从进程ID获取进程句柄的步骤
    枚举进程,然后获取主应用程序窗口句柄 对于每个过程

    您需要这些API:

    • 枚举所有进程
    • 使用argent
      GWL_样式
      获取和
      GWL_EXSTYLE
      获取
    • 确定无主窗口的步骤
    通过使用
    GetWindowThreadProcessId()
    过滤
    EnumWindows()
    的结果,可以获得属于给定进程的所有窗口

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

    您所能做的最好是使用与相同的规则,因为这是用户认为的主窗口:

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

    确保“窗口”按钮处于打开状态 放置在任务栏上,使用 WS_EX_APPWINDOW扩展样式。防止窗口按钮 放置在任务栏上,使用 WS_EX_TOOLWINDOW扩展样式。或者,您可以创建一个 隐藏窗口,并使此隐藏窗口的所有者可见 窗户

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