首页 新闻 会员 周边

C#捕获鼠标移动消息

0
悬赏园豆:40 [已解决问题] 解决于 2011-08-23 09:44

我有一个Winform应用程序,重载了方法“WndProc”代码如下:

const int WM_MOUSEMOVE = 0X0200;

        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case WM_MOUSEMOVE:
                    Debug.Write(string.Format("CurrentDate:{0}", DateTime.Now) + Environment.NewLine);
                    break;
            }
            base.WndProc(ref m);
        }

我想捕获鼠标在应用程序上移动时的消息,但是当我把鼠标放置在应用程序上面,然后就不动鼠标,但是在vs.net中的Output中就看到一直在输出信息!太奇怪了。我并没有移动鼠标,为什么会捕获到这个消息了呢?

请教高人,我只想当鼠标移动的时候捕获到这个消息,应该怎么处理?谢谢了

问题补充:

现在问题基本已经确定了,与操作系统有关系。win7下就会出现上述问题。在XP下面不会。哪位高手知道为什么会出现这样的情况吗?

冰碟的主页 冰碟 | 初学一级 | 园豆:112
提问于:2011-08-05 18:36
< >
分享
最佳答案
0

当您把鼠标移过窗口的显示区域时,Windows并不为鼠标的每个可能的图素位置都产生一个WM_MOUSEMOVE消息。您的程序接收到WM_MOUSEMOVE消息的次数,依赖于鼠标硬件,以及您的窗口消息处理程序在处理鼠标移动消息时的速度。

我又试了一下你的代码,只有在鼠标移动时才产生输出,是正确的:

收获园豆:40
artwl | 专家六级 |园豆:16736 | 2011-08-05 18:41
请问,但我鼠标停留的时候,为什么还能捕获这个消息呢?还有就是能通过代码避免这种情况吗?
冰碟 | 园豆:112 (初学一级) | 2011-08-05 19:03
我又试了一下你的代码,只有在鼠标移动时才产生输出,是正确的,见上图
artwl | 园豆:16736 (专家六级) | 2011-08-05 20:11
不是呀,我的代码是不对的。只要鼠标在应用程序上面,就会差不多隔一秒左右输出一次。当鼠标离开这个应用程序,就不会输出!请你在试验一下看看!
冰碟 | 园豆:112 (初学一级) | 2011-08-06 19:04
这个可能与硬件有关,在我电脑上还是截图中那样,鼠标不动就不输出
artwl | 园豆:16736 (专家六级) | 2011-08-06 19:08
是这样吗?我在试试,我工作的环境是win7 32bit。我回头在在XP下面试试。谢谢你!
冰碟 | 园豆:112 (初学一级) | 2011-08-07 22:35
我试验了一下,果真跟我的操作系统有关系!不知道为什么win7下会是这样。
冰碟 | 园豆:112 (初学一级) | 2011-08-08 10:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册