【问题标题】:Windows Hook to catch WM_MDITILE (using good old C++)Windows Hook 捕捉 WM_MDITILE(使用良好的旧 C++)
【发布时间】:2011-03-25 14:03:09
【问题描述】:

我知道每个人都热衷于出色的移动或网络类型的工作。好吧,我被困在一些好的旧 C++ 上。这就是困扰我的问题。

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

所以现在有几个问题:

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

2- 如何让它从进程中提取消息?

3- 有什么提示可以获取 WM_MDITILE 的示例挂钩代码吗?

4- 我尝试做一个键盘钩子,但效果很好,为什么这不起作用?

5- 我正在使用带有以下 DllMain 代码的 win 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;
}

有什么提示或建议吗?

谢谢

【问题讨论】:

    标签: c++ windows hook


    【解决方案1】:

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

    更多详情请参考以下链接:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 2011-03-13
      • 2011-07-12
      • 1970-01-01
      相关资源
      最近更新 更多