Winform跨程序发送、接收消息

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

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

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



评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值