c# 中如何定义和接收消息?(转)

在C#中目前我还没有找到发送消息的类成员函数,所以只能采用通过调用WIN 32 API 的 SendMessage() 函数实现。由于 SendMessage的参数中需要得到窗体的句柄(handler) ,所以又要调用另一个API FindWindow(), 两者配合使用,达到在不同窗体之间的消息发送和接收功能。

另外一个要点是,需要通过重写(Override) 窗体的 DefWndProc() 过程来接收自定义的消息。DefWndProc 的重写:

protected override void DefWndProc(ref System.Windows.Forms.Message m)
{
switch(m.Msg)
{
case ...:
break;
default:
base.DefWndProc(ref m);
break;
}
}

下面是我的C#实践例程。
------------------------------------
/////////////////////////////////////////
///file name: Note.cs
///
public class Note
{
//声明 API 函数

[DllImport("User32.dll",EntryPoint="SendMessage")]
private static extern int SendMessage(
int hWnd, // handle to destination window
int Msg, // message
int wParam, // first message parameter
int lParam // second message parameter
);
[DllImport("User32.dll",EntryPoint="FindWindow")]
private static extern int FindWindow(string lpClassName,string
lpWindowName);
//定义消息常数
public const int USER = 0x500;
public const int TEST = USER + 1;

//向窗体发送消息的函数

private void SendMsgToMainForm(int MSG)
{
int WINDOW_HANDLER = FindWindow(null,@"Note Pad");
if(WINDOW_HANDLER == 0)
{
throw new Exception("Could not find Main window!");
}
SendMessage(WINDOW_HANDLER,MSG,100,200);
}
}

/////////////////////////////////////////
/// File name : Form1.cs
/// 接收消息的窗体
///

public class Form1 : System.Windows.Forms.Form
{
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// 重写窗体的消息处理函数
protected override void DefWndProc(ref System.Windows.Forms.Message m)
{
switch(m.Msg)
{
//接收自定义消息 USER,并显示其参数
case Note.USER:
string message = string.Format ("Received message!
parameters are :{0},{1}",m.WParam ,m.LParam);
MessageBox.Show (message);
break;
default:
base.DefWndProc(ref m);
break;
}
//Console.WriteLine(m.LParam);
}
 

时间: 2024-10-02 09:54:29

c# 中如何定义和接收消息?(转)的相关文章

COPYDATASTRUCT在托管VC++中怎么定义和接收数据呢

问题描述 对应消息WM_COPYDATA的结构体COPYDATASTRUCT在托管VC++中怎么定义和接收数据呢发现托管VC的代码网上太少了,在这个问题上耗了一天,万能的CSDN的大侠们 解决方案 解决方案二:托管c++可以像非托管一样用解决方案三:最好直接用吧,我后面会跟C#的系统交互,解决方案四:要传什么样的数据?最好是用非托管.

android,环信3.0,接收消息在onResume事件中无响应

问题描述 在onResume中添加了addMessageListener,在他的onMessageReceived中去接收消息,刚进去的时候可以收到消息,但是只要接收方发过一次消息之后,onResume事件就不调用了,里面的方法都不会调用,请问这是怎么回事儿,有解决办法吗?谢谢 解决方案 按照demo中的EaseChatFragment 这个类中的 onResume 和 onStop 看下这两个生命周期方法了.里面有注册和注销的方法的  您这边可以参照demo中的看下 看下这些生命周期的方法走不

请问Android适配器中我怎么判断接收的消息是否是自定义消息

问题描述 请问Android适配器中我怎么判断接收的消息是否是自定义消息 解决方案 去获取消息的扩展,判断是否有值,比如if(message.getStringAttribute("attr",null)!=null)

jms-Spring JMS接收消息的同时怎么给发送端发送回执说已经接收到消息

问题描述 Spring JMS接收消息的同时怎么给发送端发送回执说已经接收到消息 我想要在JMS接收到消息的时候告诉接收端已经接收到消息应该怎么做? 解决方案 这是你自己定义个通信协议的事,收到消息后向消息生产者发送自定义的收到消息就可以了,jms消息使用用下面代码实现1.消息发送 Java代码 复制代码//连接工厂 ConnectionFactory connFactory = new ActiveMQConnectionFactory( ActiveMQConnection.DEFAULT_

spring JMS在接收消息的时候总是报错

问题描述 spring JMS在接收消息的时候总是报错 org.springframework.jms.UncategorizedJmsException: Uncategorized exception occured during JMS processing; nested exception is javax.jms.JMSException: Unexpected error occured at org.springframework.jms.support.JmsUtils.con

微信企业号验证/发送/接收消息_java

1. 内网映射 由于微信企业号回调模式的URL尽支持域名方式访问,估需要注册花生壳,做一个内网穿透(需要花16块钱,购买一个免费版,购买之后,第二天才能添加上域名) 2. 微信企业号 注册微信企业号:https://qy.weixin.qq.com/ (选择团队,团队不需要认证) 通讯录:新建组织 - > 关注成员 企业号 -> 应用中心 -> 新建应用 -> 消息型应用 -> 模式选择(回调模式) -> 开启微信消息转发, 回调模式说明:http://qydev.we

Android中使用socket通信实现消息推送的方法详解_Android

原理最近用socket写了一个消息推送的demo,在这里和大家分享一下. 主要实现了:一台手机向另外一台手机发送消息,这两台手机可以随时自由发送文本消息进行通信,类似我们常用的QQ. 效果图: 原理:手机通过socket发送消息到服务器,服务器每接收到一条消息之后,都会把这条消息放进一个messageList里面,服务器会不停地检测messageList是否含有消息,如果有的话就会根据messageList里面item的数据,推送到相应的另一端手机上面. 下面简单画了一个图来说明这个原理: 演示

Android中使用socket通信实现消息推送的方法详解

原理 最近用socket写了一个消息推送的demo,在这里和大家分享一下. 主要实现了:一台手机向另外一台手机发送消息,这两台手机可以随时自由发送文本消息进行通信,类似我们常用的QQ. 效果图: 原理:手机通过socket发送消息到服务器,服务器每接收到一条消息之后,都会把这条消息放进一个messageList里面,服务器会不停地检测messageList是否含有消息,如果有的话就会根据messageList里面item的数据,推送到相应的另一端手机上面. 下面简单画了一个图来说明这个原理: 演

飞信发送消息失败或无法接收消息怎么办

当用户通过飞信发送/接收消息时,如果遇到无法正常收发消息的情况,请参考以下方法进行排查: 1.请确认接收消息的好友状态是否正常,如果他是停机.关闭飞信服务且未公开手机号等状态,可能会无法正常收发消息. 2.请确认自己的姓名或短信内容中是否有敏感词(反动.暴力.色情等),如有,则短信可能无法正常收发. 3.请确认好友关系是否正常,如果未成功建立好友关系,可能会无法正常收发消息.建议双方重新建立好友关系. 4.请确认是否将接收消息的好友加入了黑名单,或者自己被他加入了黑名单.如果存在上述现象,那么用