首页 新闻 赞助 找找看

Win7系统下如捕获Windows消息“WM_MOUSEMOVE”的问题

0
[待解决问题]

大家好,

我有个问题关于windows消息的。

前提:Win7 32位

目的:当鼠标在application中移动的时候捕获移动鼠标移动的windows消息

以下代码添加到一个winform窗体中

但是我运行application后,鼠标停留在应用程序中,我的vs.net的output就一直输出信息。就意味着application一直都在捕获鼠标的移动消息。奇怪的就在这里,同样的代码在Windows XP下运行时就没有问题。当且尽当我鼠标移动的时候才输出这些信息。鼠标停留在application中时,没有任何输出!

请大家帮我看看是什么问题吧,谢谢大家了!

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);
}

冰碟的主页 冰碟 | 初学一级 | 园豆:112
提问于:2011-08-15 11:50
< >
分享
所有回答(1)
0

你只需要获取你当前的应用程序的鼠标消息吧 ?

你打印出的东西太多了,你把 Debug.Write 去掉应该就没事了,

像你这种情况还是使用钩子的比较好 ~

小宝马的爸爸 | 园豆:210 (菜鸟二级) | 2011-08-15 23:59
不好意思,没有明白你的意思。我去掉Debug.Write怎么就没事了呢?
还有你说钩子,请问怎么实现,能给我个简短的代码吗?
支持(0) 反对(0) 冰碟 | 园豆:112 (初学一级) | 2011-08-18 09:23
Windows 是消息驅動的操作系統,你在你的 Application 裏面重寫了 WndProc,也就是全部的消息都要經過你的 WndProc 的處理,而你在 WndProc 裏面又做了 IO 處理(IO 處理很慢很耗時),自然會讓你的 Application 變得很卡,關於 Hook 的代碼在網上有很多的,常見得做法是直接進行進程內的 Hook ,你可以通過 C# 的 PInvoke 實現導入 Win32 API SetWindowsHookEx ,通過這個 API 你就可以實現鉤子了,然後再在鉤子的處理函數中處理 WM_MOUSE 消息即可。
支持(0) 反对(0) 小宝马的爸爸 | 园豆:210 (菜鸟二级) | 2011-08-18 09:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册