低级过程挂钩中 WM_LBUTTONUP 或 WM_LBUTTONDOWN 的尽头是什么?

What is the end of the road for a WM_LBUTTONUP or WM_LBUTTONDOWN in a low level procedure hook?

我正在使用 Win32 API 在 Windows 中编写一个低级鼠标挂钩,我想根据特定条件拦截按下或向上(仍未决定)的按钮。

为了定位我们自己,让我们考虑以下处理这些挂钩的程序片段:

LRESULT CALLBACK mouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
    if (nCode == 0) {
        // Only act on the left click up message:
        if (wParam == WM_LBUTTONUP) {
            // Logic would go here...
            // XXX
        }
    }
    return CallNextHookEx(NULL, nCode, wParam, lParam);
}

它主要按预期工作,当条件不满足时,程序通过 CallNextHookEx() 调用下一个行收到按钮按下的进程不是我要找的进程)。

但是,当谈到行尾时,我不知所措,换句话说:如果我在注册点击时做我想做的所有事情,我该如何发出信号?该过程是否有任何特定的 return 值 return?

例如,即使程序流经过处理事情和处理所有事情的路径,除非我不 return 对下一个挂钩的调用左侧(或右侧,视情况而定)按钮卡住,就好像从未松开过一样。

使用文件资源管理器进行测试,如果单击发生在文件上,除非调用下一个挂钩,否则您将拖动文件。这是一个简单的行为示例,Explorer 显然需要处理 WM_LBUTTONUP 本身而不是拖动文件,但问题仍然存在, 它是如何做到的?最后是什么?

片段中的

XXX 是该代码所在的位置,所有内容都已处理,因此鼠标应该是自由的(未绑定到任何东西?),可能 return 在那里是有序的;我就是想不通是什么。

我会把评论整理成一个答案,让到这里的人看得清楚。

@Vlad Feinstein是对的,hook过程中的消息不要乱用。

@Phil1970 给出了最准确的答案,因为每个应用程序都以自己的方式处理消息,所以没有通用的方法可以知道一个人的处理方式;从外面看,我们对它们的处理方式一无所知,例如触发了哪些状态标志或事件。

在这种情况下,我认为即使拦截了 所有 与鼠标点击相关的消息也不可能,如果是的话过度设计。