开发环境:vs2010 C# WinForm windows7 x86 下载Demo
我的问题可以一句话描述:
注册全局鼠标钩子后用鼠标点击窗口上最大化、最小化、关闭窗口界面卡死
找到问题的关键点我也花了不少功夫,一点点地测试出来的。最后才发现是安装全局鼠标hook造成的。我现在把他单独拿出来作为demo,寻找解决办法.
UserActivityHook 这个类里面 506 行是执行安装全局hook的方法,其中第一个参数表示是否安装全局鼠标hook,第二个则是键盘的,如果只安装键盘不安装鼠标的则不会出现这个问题。
我在网站找了好多个论坛和博客,也有遇到类似问题的,有的是易语言,有的是.net,最后都是没解决。参考这个贴子 不过他是vc,也会出现这个问题,我想这是不是windows api的一个bug啊?
我想这个问题应该不是没有办法解决只是我太菜了,而且大家手头上没有demo,没有办法测试。所以这次我就把这个demo发上来,希望.net方面的高手能帮我测试一下,找出问题并解决它。毕竟这是个很典型的问题,小弟在此谢过!(我有200个园豆,就全部拿出来吧!)
有人说要添加消息循环,事实上不添加消息循环,hook根本没办法安装成功,我试过,所以不是这个问题。有人说是要新建线程,我也新建线程了,但问题依旧。其实我不是很懂消息循环,随便猜测的是不是消息循环就是在ui线程上工作啊,所以新建线程也没用,还是UI线程。
奇怪又有趣的是,如果不用鼠标用快捷键,按alt+空格 然后再按x ,这样最大化就不会卡。晕。。。
这个问题我也同时在CSDN论坛上提问,看看能不能解决吧!
刚才在百度知道上提问,发现百度知道也有人提问过这个问题:
不过他这是vc 我这是c#, 看来这应该不是.net本身的问题,而是windows api的问题!!是吗?
重大发现:我快疯了,发现了更奇怪的问题!
看到回帖好几位朋友说测试没有毛病,我就多找了几台同事电脑测试,有的行有的不行。最后终于发现规律:
1、凡是采用windows 经典主题的就没问题;
2、凡是不采用经典主题的都会多少出现卡的情况,winxp 卡的时候短点儿,但也会卡,win7非经典主题下卡的最为严重!这是什么毛病呢?
结贴说明:
这个问题最后还是没解决,等了两天也再没有新的答案。估计非常棘手,恐怕要微软的工程师才能解决。所以结贴吧,毕竟 Launcher 和 狼Robot 帮助我不停地测试。而且 Launcher 还教我一些技巧。在此对二位表示感谢。
最后做个问题总结:
还是用一句话吧:采用windows非经典主题时注册全局鼠标钩子后用鼠标点击窗口上最大化、最小化、关闭窗口界面卡死。
这应该是一个系统的bug或者api的bug,毕竟从互联网上可以看到VC、.net 还有易语言等多种开发环境都出现过这个问题,没有一个解决的。虽然我很菜,但是会继续关注解决办法,毕竟是一个不小的问题.