// フックの処理
LRESULT CALLBACK CHook::CBTProc(int p_nCode, WPARAM p_wParam, LPARAM p_lParam)
{
    // 処理してはいけないメッセージなので、次へ渡す
    if( p_nCode < 0 || p_nCode == HC_NOREMOVE)
        return ::CallNextHookEx( m_hHook, p_nCode, p_wParam, p_lParam );

    if( p_nCode == HCBT_ACTIVATE ) // ここがアクティブウィンドウが発生したときの処理
        TRACE0(_T("アクティブ化\n"));

    return ::CallNextHookEx( m_hHook, p_nCode, p_wParam, p_lParam );// 次のフックへと繋げる
}

また、このフックハンドルや必要な変数はグローバルにし、他とかぶらないようにしてあります。

#pragma data_seg( ".CKHookData" )
HHOOKCHook::m_hHook = NULL;
#pragma data_seg()

この状態で使用すると、フックを呼び出したウィンドウがアクティブになったときにしか反応しません。
これではローカルフックと変わりません。
いろいろ試してはみたのですがどうにも・・・どなたかわかる方、ご教授願います。
MFCアプリで使用するので、DLLはMFC DLL の拡張モードで作成してあります。