首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

WH_MOUSE_LL的运行效率有关问题!

2012-01-24 
WH_MOUSE_LL的运行效率问题!!!问题是这样的最近做了个鼠标钩子的程序,原来使用的是SetWindowsHookEx(WH_MO

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中.系统会自动调用.对于系统来说,不存在跨进程空间的问题.

热点排行