Windows Hook捕获WM_MDITILE(使用旧的C ++)

时间:2011-03-25 14:03:10

标签: c++ windows hook

我知道每个人都有很棒的移动或网络类型的工作。好吧,我被困在一些好的旧C ++上。这是什么烦我。

当用户在另一个应用程序中按下“Tile Vertically”菜单(在另一个进程中)时,我希望我的应用程序执行某项操作。 (许多应用程序都有一个菜单“Windows”,下面是一个子菜单“Tile Vertically”)。我假设我需要使用SetWindowsHookEx设置全局钩子。我尝试使用“WH_CALLWNDPROC”执行此操作,并且只能挂钩到“进程中”消息,而不是“进程外”。我也尝试了WH_GETMESSAGE。我尝试捕获WM_SIZE,这也没有结果。 实际上,即使在进程中,WM_SIZE也不能在所有窗口上工作,只能在其中一些窗口上工作。

所以现在有几个问题:

1-什么是正确的钩子类型(WH_CALLWNDPROC或WH_GETMESSAGE或者可能使用的其他钩子类型之一)?

2-如何让它获取进程消息?

3-我可以获得WM_MDITILE的示例钩子代码的任何提示吗?

4-我试过做一个键盘钩子,这有效,为什么这不起作用?

5-我正在使用下面的DllMain代码获得32 dll。它有什么问题吗?

HINSTANCE hinst;

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        //
        // Capture the application instance of this module to pass to
        // hook initialization.
        //
        if (hinst == NULL)
        {
            hinst = hModule;
        }

    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }

    return TRUE;
}

任何提示或建议?

由于

1 个答案:

答案 0 :(得分:0)

可能你应该尝试WH_MSGFILTER或WH_SYSMSGFILTER? 看起来这些ID专用于监视由于对话框,消息框,菜单或滚动条中的输入事件而生成的消息。

有关详细信息,请参阅以下链接:

http://msdn.microsoft.com/en-us/library/ms644990(v=vs.85).aspx