views:

23

answers:

0

I use CBT Windows Hook to detect window creation/deletion/min-max/move-size events.

I works well, but I need to filter whose events coming from normal widgets. Practically I need to being notified by CBT hook only for those windows that the user consider windows.

The problem that I'm facing make me mad, since I continuosly get spurious events even if I filter window as follow:

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);
}

Those spurious events comes from shadow effects, menus and everything displayed on screen.

Is there a robust method to filter real windows from its children?

I avoid the test of WS_BORDER or similar, since some applications could create their main window without border... or am I wrong?