我使用CBT Windows Hook来检测窗口创建/删除/最小最大/移动大小事件。
我工作得很好,但我需要过滤来自普通小部件的事件。实际上,我只需要通过 CBT 挂钩通知用户认为窗口的那些窗口。
我面临的问题让我很生气,因为即使我按以下方式过滤窗口,我也会不断收到虚假事件:
BOOL FilterWindowHandle(HWND hwnd)
{
// Filtered window having WS_CHILDWINDOW style
if ((GetWindowLongPtr(hwnd, GWL_STYLE) & WS_CHILDWINDOW) != 0)
return (TRUE);
// Filtered window not having WS_CAPTION style
if ((GetWindowLongPtr(hwnd, GWL_STYLE) & WS_CAPTION) == 0)
return (TRUE);
// Not filtered
return (FALSE);
}
这些虚假事件来自阴影效果、菜单和屏幕上显示的所有内容。
是否有一种强大的方法可以从其子项中过滤出真实的窗口?
我避免测试WS_BORDER
或类似的测试,因为某些应用程序可以创建没有边框的主窗口......还是我错了?