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
ます...または間違っていますか?