Winapi 如何判断窗口句柄是否为主窗口句柄?

Winapi 如何判断窗口句柄是否为主窗口句柄?,winapi,Winapi,你好,谢谢你阅读我的问题 我目前正在构建一个程序,用于检测新窗口的创建/终止 非常感谢,我成功地实现了WinEvents和SetWinEventHook,以捕获事件并过滤窗口的创建和终止 然而,我面临着一项挑战性的任务,要准确过滤正确的窗口句柄 例如,当putty.exe运行时,我的函数会捕获许多句柄,包括主句柄、按钮句柄等 然而,我只希望过滤主窗口句柄 因此,我使用if语句如下 if (event == EVENT_OBJECT_CREATE && GetParent(hwnd

你好,谢谢你阅读我的问题

我目前正在构建一个程序,用于检测新窗口的创建/终止

非常感谢,我成功地实现了WinEvents和SetWinEventHook,以捕获事件并过滤窗口的创建和终止

然而,我面临着一项挑战性的任务,要准确过滤正确的窗口句柄

例如,当putty.exe运行时,我的函数会捕获许多句柄,包括主句柄、按钮句柄等

然而,我只希望过滤主窗口句柄

因此,我使用if语句如下

if (event == EVENT_OBJECT_CREATE && GetParent(hwnd)==NULL)
这似乎奏效了一段时间

然而,这个if语句阻止我的程序捕获子窗口的主句柄

有没有办法判断窗口句柄(HWND)是否属于主窗口

我的同事告诉我实现GetWindowLong并比较样式

但是,我对此一无所知

若有人知道答案,请帮忙


再次感谢您阅读此问题。

您不能仅“筛选主窗口句柄”,也不能捕获“子窗口的主句柄”。在询问如何做之前,你必须决定你到底想做什么。Windows API中没有“主窗口”这样的概念。基本原理将在第页进行解释。任何程序都可以创建零个或多个“顶级窗口”。系统不会为这些窗口订阅任何附加语义,当然也不会随意选择或将其中任何窗口标记为“主窗口”。NET只是一个猜测。如果窗口类名是您注册的类名或控件名,您可以使用检查窗口类名。您不能仅“筛选主窗口句柄”,也不能捕获“子窗口的主句柄”。在询问如何做之前,你必须决定你到底想做什么。Windows API中没有“主窗口”这样的概念。基本原理将在第页进行解释。任何程序都可以创建零个或多个“顶级窗口”。系统不会为这些窗口订阅任何附加语义,当然也不会随意选择或将其中任何窗口标记为“主窗口”。NET只是一个猜测。如果窗口类名是您注册的类名或控件名,也许您可以使用检查窗口类名。