16,555
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
namespace MessageFilter
{
public partial class MessageWatcher : UserControl
{
private MessageInspector _msgInspector = null;
public MessageWatcher()
{
InitializeComponent();
}
bool _msgInspector_InspectMessage(Message arg)
{
Control ctrl = Control.FromHandle(arg.HWnd);
if (ctrl == null) return false;
if (ctrl.Name == "lblSender") return false;
if (ctrl.Name == "lblMsg") return false;
lblSender.Text = ctrl.Name;
lblMsg.Text = arg.ToString();
return false;
}
private void MessageWatcher_Load(object sender, EventArgs e)
{
_msgInspector = MessageInspector.Instance();
_msgInspector.InspectMessage += new Func<Message, bool>(_msgInspector_InspectMessage);
}
}
internal class MessageInspector : IMessageFilter
{
public event Func<Message, bool> InspectMessage;
private MessageInspector()
{ }
private static MessageInspector _inspector;
public static MessageInspector Instance()
{
if (_inspector == null)
{
_inspector = new MessageInspector();
Application.AddMessageFilter(_inspector);
}
return _inspector;
}
public bool PreFilterMessage(ref Message m)
{
if (InspectMessage != null)
return InspectMessage(m);
else
return false;
}
}
}