【发布时间】:2014-01-02 16:21:47
【问题描述】:
我使用 WH_KEYBOARD_LL 挂钩并总是向系统返回消息。
我想知道以下两种方式,哪个更好?我认为方式//1 的性能更好,因为它会立即将消息发送回系统,而//2 必须完成其内容然后发送回,但我看到几乎人们使用//2。帮我理解一下,谢谢!
HHOOK _l_hook
// 1
LRESULT __stdcall l_Callback(int nCode, WPARAM wParam, LPARAM lParam)
{
CallNextHookEx(_l_hook, nCode, wParam, lParam);
//Do stuff
return 0;
}
// 2
LRESULT __stdcall l_Callback(int nCode, WPARAM wParam, LPARAM lParam)
{
//Do stuff
CallNextHookEx(_l_hook, nCode, wParam, lParam);
}
【问题讨论】:
-
您应该根据文档返回调用
CallNextHookEx的结果。无论如何,这不应该太重要,因为 IIRC,钩子程序有一个特定的超时。 -
由于您担心性能:没有可衡量的差异。无论如何,这两个版本都不遵守文档中规定的规则。
-
文档说:一个钩子过程可以在处理钩子信息之前或之后调用这个函数。我会说最后坚持标准
return CallNextHookEx(...),因为如果您的回调非常昂贵以至于首先或最后调用下一个钩子会产生任何真正的不同,那么您可能首先在那里做了太多工作(并且您可能希望通过队列或其他方式将其卸载到另一个线程,以保持回调快速简单)。
标签: c++ winapi return hook message