我正在使用 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);
}
它主要按预期工作,当条件不满足时,程序调用 next in line through CallNextHookEx()
,当找到不合格的参数时,我有几个逻辑也会发生(例如,如果收到按钮按下的进程不是那个我在找)。
但是,当谈到行尾时,我不知所措,换句话说:如果我在注册点击时做我想做的一切,我该如何发出信号?该过程是否应该返回任何特定的返回值?
例如,即使程序流经过处理事情和处理所有事情的路径,除非我不返回对下一个钩子的调用,否则左(或右,取决于)按钮会卡住,就好像它从来没有释放。
使用文件资源管理器进行测试,如果单击文件发生在文件上,除非调用下一个挂钩,否则您将拖动文件。这是行为的一个简单示例,资源管理器显然需要处理WM_LBUTTONUP
自身而不是拖动文件,但问题仍然适用,它是如何做到的?最后是什么?
XXX
在代码片段中是该代码所在的位置,所有内容都已处理,因此鼠标应该是空闲的(未绑定到任何东西?),可能areturn
在那里是有序的;我就是想不通是什么。