Winform跨程序发送、接收消息

原创 2016年07月16日 16:39:22

看到论坛上一个问题:程序已经在运行,再次运行时,要向前一个实例发送一些消息。

简单的写了一些,直接贴代码!

1、封装了一个类,用于发送信息

    class Note
    {
        [DllImport("User32.dll", EntryPoint = "SendMessage")]
        private static extern int SendMessage(IntPtr hWnd, int msg, int wParam, ref CopyData lParam);
        [DllImport("User32.dll", EntryPoint = "FindWindow")]
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        //定义消息常数 
        public const int WM_COPYDATA = 0x004A;
        public struct CopyData
        {
            public IntPtr dwData;
            public int cbData;
            [MarshalAs(UnmanagedType.LPStr)]
            public string lpData;
        }
        public static bool SendMsg(string MSG)
        {
            var hwnd = FindWindow(null, "MainForm");
            if (hwnd == IntPtr.Zero)
            {
                return false;
            }
            CopyData data;
            data.dwData = IntPtr.Zero;
            data.lpData = MSG;
            data.cbData = Encoding.Default.GetBytes(data.lpData).Length + 1;
            SendMessage(hwnd, WM_COPYDATA, 0, ref data);
            return true;
        }
}

2、在MainForm里override了WndProc,用于接收消息

protected override void WndProc(ref Message m)
{
    if (m.Msg == Note.WM_COPYDATA)
    {
        string s = ((Note.CopyData)Marshal.PtrToStructure(m.LParam, typeof(Note.CopyData))).lpData;
        MessageBox.Show(s);
    }
    else
        base.WndProc(ref m);
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

Winform实现后台推送,数据跨线程实时刷新控件

1. 用委托事件实现数据实时推送并刷新页面,适用于前台和后台松耦合但没有分布式部署的情况。 2. 首先定义一个全局的委托事件 public class Notice { ...
  • xiaoyiyz
  • xiaoyiyz
  • 2016年03月07日 15:18
  • 3300

java kafka消息的发送与接收

java kafka消息的发送与接收                消息队列在java EE级开发是很常用到的工具之一,在众多消息队列当中,active mq与kafka相对比较受开发者的喜...
  • u013144287
  • u013144287
  • 2017年07月28日 19:24
  • 3294

c# 中如何定义和接收消息

在C#中目前我还没有找到发送消息的类成员函数,所以只能采用通过调用WIN 32 API 的 SendMessage() 函数实现。由于 SendMessage的参数中需要得到窗体的句柄(handler...
  • 21aspnet
  • 21aspnet
  • 2007年03月24日 13:56
  • 2021

winForm中使用MQTT收发消息

  • 2017年12月25日 15:07
  • 100KB
  • 下载

C# WinForm 消息大全

不要以为下面的东西只有C++中才会用到哦! 消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给...
  • u011970435
  • u011970435
  • 2015年06月19日 11:52
  • 582

smack发送和接收信息

/** *发送消息 *@param con 用户连接对象 *@param user 用户JID *@param msg 发送内容 */ @Ov...
  • yezis
  • yezis
  • 2014年09月04日 13:56
  • 1068

C#程序员开发WinForm必须知道的 Window 消息大全

不要以为下面的东西只有C++中才会用到哦!消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程...
  • testcs_dn
  • testcs_dn
  • 2015年01月03日 10:30
  • 17221

C#.NET 消息机制

http://blog.csdn.net/fan158/article/details/6178392 一、消息概述       众人周知,window系统是一个消息驱动的系统, ...
  • conganguo
  • conganguo
  • 2016年05月23日 17:18
  • 464

C#winform UDP通信 发送和接收信息

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin...
  • panjinliang066333
  • panjinliang066333
  • 2017年02月14日 22:14
  • 234

RabbitMQ消息通信,生产者发送消息给指定的消费者的消息队列

上一篇文章描述了,通过使用广播式的通信方式,让生产者把消息广播给每一个消费者,本节我们介绍另外一个方式,生产者可以指定消费者,把消息发送给它: client.py #!/usr/bin/env p...
  • u012631731
  • u012631731
  • 2017年11月10日 21:37
  • 271
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Winform跨程序发送、接收消息
举报原因:
原因补充:

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