Я использую CBT Windows Hook для обнаружения событий создания / удаления окна / min-max / move-size.
Я хорошо работаю, но мне нужно отфильтровать чьи события из обычных виджетов. Практически мне нужно, чтобы CBT-ловушка уведомляла меня только о тех окнах, которые пользователь считает Windows.
Проблема, с которой я сталкиваюсь, сводит меня с ума, так как я постоянно получаю ложные события, даже если я фильтрую окно следующим образом:
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
или аналогичного, поскольку некоторые приложения могут создавать свое главное окно без рамки ... или я ошибаюсь?