【50分】如何提取Windows消息

CsToD 2008-08-01 07:49:45
我想知道在某个事件发生时,会产生什么消息
例如我改变窗口大小时,Windows肯定会发出一些消息,我要怎么才能知道产生了哪些消息呢?
我就是想在某个时刻提取产生的消息,不限于具体的动作(也就是不仅仅要求获得改变窗口大小的消息)
...全文
100 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
aimeast 2008-08-03
  • 打赏
  • 举报
回复
给你个例子看看吧
http://blog.csdn.net/aimeast/archive/2008/07/31/2749586.aspx
这里面有记录消息的方法。
王集鹄 2008-08-03
  • 打赏
  • 举报
回复
囧 .NET基本把常用的消息封装了。

Click、Resize、MouseMove等等都直接有事件响应。

有标准的就用标准的。。。

想知道具体的消息,可以重载WndProc方法,打个日志即可。
wuyi8808 2008-08-03
  • 打赏
  • 举报
回复
Spy++
CsToD 2008-08-03
  • 打赏
  • 举报
回复
up
CsToD 2008-08-02
  • 打赏
  • 举报
回复
up
CsToD 2008-08-01
  • 打赏
  • 举报
回复
一直搞不清除WndProc和DefWndProc的区别

而且你的回答跟我的要求,没什么关系

我是想在任何时候去获取消息,比如单击事件中,自定义方法中
你那个方法我懂,解决不了问题,限定我的代码必须位于那个方法中了
睡神在睡觉 2008-08-01
  • 打赏
  • 举报
回复
api捕获消息吧,每个事件你加入捕获应该就可以

楼主在网上找找吧,这样的东西太多了,譬如钩子什么的,都很多啊
hbyelang 2008-08-01
  • 打赏
  • 举报
回复
比较常用的是重载Form的DefWndProc方法,例如截取鼠标按下的消息:
protected override void DefWndProc(ref Message m)
{
if ( m.Msg == 0x0201 )
{
MessageBox.Show(m.Msg.ToString());
}
else
{
base.DefWndProc (ref m);
}
}
还可以通过另一种办法,使用IMessageFilter 接口:
public class MessageFilter : IMessageFilter
{
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == 0x0201)
{
MessageBox.Show("WM_LBUTTONDOWN is: " + m.Msg);
return true;
}
return false;
}

}
然后使用Application.AddMessageFilter方法,例如:
private static MessageFilter msgFliter = new MessageFilter();
在Main方法中注册消息筛选器:
Application.AddMessageFilter(msgFliter);
如果要取消注册,可以调用Application.RemoveMessageFilter方法

具体的可以查一下Windows Message ID 常量列表 找到你需要的即可
starts_2000 2008-08-01
  • 打赏
  • 举报
回复
Spy++
zxm_heiye 2008-08-01
  • 打赏
  • 举报
回复
不懂该怎么做 等待....期待....盼望....大虾出来啊!
twtetg 2008-08-01
  • 打赏
  • 举报
回复
很强大的东东,学习关注
LQknife 2008-08-01
  • 打赏
  • 举报
回复
搜搜钩子程序,参考键盘钩子
格拉 2008-08-01
  • 打赏
  • 举报
回复
mark
isee1223 2008-08-01
  • 打赏
  • 举报
回复
楼主是不是搞C++的啊.

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧