C# 中如何定义和接收消息?

原创 2001年09月25日 21:55:00

C# 中如何定义和接收消息?

Wason

    业余学习成果: 终于把自定义消息给搞定,好事多多分享!

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

--

Wilson Wei

[C#]自定义消息收发

原创文章,欢迎转载。转载请注明:转载自 祥的博客原文链接:http最近由于项目要用到C#,所以最近学了一下C#,其中别人的代码里面用了 自定义消息,不过他们的代码是半开源,所以为了验证他们程序的传递机...
  • humanking7
  • humanking7
  • 2016年04月01日 12:59
  • 1490

C# 两个独立exe程序直接通信 截取Windows消息来触发自定义事件 实例

两个独立的exe程序之间如何完成通信呢?首先想到的办法是利用生成文件的方法,即,发送端在某个目录下生 成一个文件,包含要发送的消息,接收端从这个目录中读取文件且获取消息。这个方法也能实现通信,但...
  • jackiehome
  • jackiehome
  • 2017年02月28日 17:26
  • 292

C# SOCKET发送和接收例子

Socket 客户端 using System; using System.Collections.Generic; using System.Linq; using System.T...
  • shileimohan
  • shileimohan
  • 2015年03月23日 13:29
  • 2161

dotNet微信公众号开发二:接收并回复普通文字消息

dotNet微信公众号开发,接收并回复普通文字消息.ASP.NET C# MVC 当有用户向公众号发送消息的时候,微信会向我们的借口以POST的方式推送消息。示例代码。 简单的接收和发送消息。普通文...
  • xue251248603
  • xue251248603
  • 2016年04月09日 17:45
  • 2130

C#发送和接收消息

using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServi...
  • qq_34329383
  • qq_34329383
  • 2017年07月30日 16:36
  • 66

C# 发送、接收和处理自定义的WINDOWS消息

C# 发送、接收和处理自定义的WINDOWS消息   为了程序启动后自动执行主函数,在Form1_Load中直接执行启动函数,可能造成没有反应。当然,在Form1_Load中加入较长时间(比如2...
  • kingmax54212008
  • kingmax54212008
  • 2015年11月02日 11:31
  • 2366

TCP 接收连接及消息的收发

我们在网络编程时,一般过程是创建套接字,然后绑定端口,然后开始监听,那么这个所谓的监听数量为什么一般很小,但是能接收很多连接,恩,后来才知道不在一个过程上,下面先从listen函数看起。listen(...
  • ythunder
  • ythunder
  • 2016年12月27日 16:48
  • 881

WCF笔记(3)发送和接收SOAP(消息)头

一、定义 消息头是附加信息,那有啥用呢?你可别说,有时候还真有不少用处。举个例子,WCF的身份验证是不是很麻烦?还要颁发什么证书的(当然不是荣誉证书),如果只是验证一个客户端的身份,如用户名什么的,...
  • ljf5566
  • ljf5566
  • 2013年03月14日 10:13
  • 3845

使用ActiveMQ进行C++与C#的通信5 - 实现C++和C#的通信

在前几篇文章分别实现C#、C++连接ActiveMQ的基础上,本文介绍如何使它们通信。...
  • pigautumn
  • pigautumn
  • 2017年08月07日 18:07
  • 191

C# 复习笔记 消息与事件处理

C# 复习笔记 消息与事件处理学习Windows编程后,有时候需要对系统消息或者事件做出自己的响应或者说自己拦截一些消息,实现某个事件或者函数的触发,这时就需要对系统消息进行处理. 大多数直接开始学...
  • baidu_31981559
  • baidu_31981559
  • 2016年05月30日 15:25
  • 1341
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 中如何定义和接收消息?
举报原因:
原因补充:

(最多只允许输入30个字)