WH_MOUSE_LL的运行效率问题!!!
问题是这样的 最近做了个鼠标钩子的程序,原来使用的是SetWindowsHookEx(WH_MOUSE,MouseProc,g_hInstance,0)但由于有些鼠标事件侦听不到,所以现在改成了SetWindowsHookEx(WH_MOUSE_LL,LowLevelMouseProc,g_hInstance,0)的更低层次的鼠标钩子。要求是达到了,但发现一个问题。当hook一启动,在操作其他窗口上,如点击其最大最小化或关闭按钮时,发现鼠标得等一会才能移动。而在系统的任务栏上切换窗口时,也会有迟钝的现象。一开始我以为是我在函数LowLevelMouseProc里写的代码的问题,最后只把函数置空(直接保持基本的传递)测试下来还是会出现这种现象。
同时发现如果把xp的视觉效果关闭则不会有这种现象。主要是“窗口最大最小化时动画”这项。关闭后则看不出停顿,开启则顿的厉害。
请问各位这个是什么原因,有什么办法可以解决。
代码基本就是这样的:
g_hHook=SetWindowsHookEx(WH_MOUSE_LL,LowLevelMouseProc,g_hInstance,0);
extern _declspec(dllexport) LRESULT CALLBACK WINAPI LowLevelMouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
//为了测试是否是代码的问题,已经被清空,但还是有上面所说的问题
return CallNextHookEx(g_hHook,nCode,wParam,lParam);
}
[解决办法]
出现的问题应该与 WH_MOUSE_LL 这个无关, 我自己写的没这个问题
[解决办法]
这段代码必须封装在DLL中,而且要仔细思考程序的逻辑,这个钩子Dll会加载到所有鼠标消息的进程空间里面去。我写的并没有出现你所描述的问题。
[解决办法]
1.钩子一定会降低系统效率,这是肯定的.
2.WINDOWS的视觉效果好像也是通过钩子做出来的.
3.部分GLOBAL ONLY的钩子不用封装到DLL中.系统会自动调用.对于系统来说,不存在跨进程空间的问题.