进程间发送消息整理(简易方案)
来源:互联网 发布:线切割老的编程法 编辑:程序博客网 时间:2024/06/12 20:42
近来因项目的需要,触及到程序进程之间的消息通讯,根据应用的简繁程序,归纳成简易方案与高级方案。本文介绍简易方案,高级方案于下一篇中整理。
以下代码包括共用结构定义,发送方,接收方三个部份的代码:
结构定义:
using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;namespace Common{ //发送共享消息的结构 public struct COPYDATASTRUCT { public IntPtr dwData; public int cbData; [MarshalAs(UnmanagedType.LPStr)] public string lpData; }}
发送方:
using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using System.Runtime.InteropServices;namespace ProjectA{ public partial class SenderForm : Form { const int WM_COPYDATA = 0x004A; //发送消息的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 ref Common.COPYDATASTRUCT lParam // second message parameter ); //通过窗体标题找出窗体的Handle [DllImport("User32.dll", EntryPoint = "FindWindow")] private static extern int FindWindow(string lpClassName, string lpWindowName); public SenderForm() { InitializeComponent(); } private void btnSendMsg_Click(object sender, EventArgs e) { //找出接收方窗体的FormHandle int WINDOW_HANDLER = FindWindow(null, @"接收方"); if (WINDOW_HANDLER != 0) { byte[] sarr = System.Text.Encoding.Default.GetBytes(this.txtMsg.Text); int len = sarr.Length; Common.COPYDATASTRUCT cds; cds.dwData = (IntPtr)100; cds.lpData = this.txtMsg.Text; cds.cbData = len + 1; //发送消息 SendMessage(WINDOW_HANDLER, WM_COPYDATA, 0, ref cds); } } }}
接收方:
using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using System.Runtime.InteropServices;namespace ProjectB{ public partial class ReceiverForm : Form { const int WM_COPYDATA = 0x004A; public ReceiverForm() { InitializeComponent(); } protected override void DefWndProc(ref System.Windows.Forms.Message m) { switch (m.Msg) { case WM_COPYDATA: Common.COPYDATASTRUCT mystr = new Common.COPYDATASTRUCT(); Type mytype = mystr.GetType(); mystr = (Common.COPYDATASTRUCT)m.GetLParam(mytype); this.txtMsg.Text = mystr.lpData; break; default: base.DefWndProc(ref m); break; } } }}
- 进程间发送消息整理(简易方案)
- 进程间发送消息整理(高级方案)
- PostThreadMessage发送进程间消息
- erlang进程间发送消息的性能
- 进程间的通信以及发送消息
- 进程间传递消息(发送和接收系统消息)
- 简易聊天——消息队列实现进程间通信
- VC 进程间通讯发送自符串消息
- VC 进程间通讯发送自符串消息
- MFC使用SendMessage()发送自定义消息实现进程间通信
- WM_COPYDATA消息机制 不同进程间发送结构体数据
- MFC使用SendMessage()发送自定义消息实现进程间通信
- 发送WM_COPYDATA消息实现进程间的通信
- MFC使用SendMessage()发送自定义消息实现进程间通信
- MFC使用SendMessage()发送自定义消息实现进程间通信
- MFC使用SendMessage发送自定义消息实现进程间通信
- MFC使用SendMessage()发送自定义消息实现进程间通信
- Win8、Win10中不同进程间发送自定义消息失败
- 当鼠标悬点时,突出当前行
- 鸟哥的Linux私房菜10.29 软件安装:RPM,SRPM与YUM功能
- 第九章 指针与const
- Spring Security学习总结一
- 第十章 围绕p()与(*p)()的争论
- 进程间发送消息整理(简易方案)
- 鸟哥的Linux私房菜10.30 X Window 设定介绍
- 数组和集合
- kMP算法介绍
- Android入门之Activity
- 鸟哥的Linux私房菜10.31 备份策略
- 记录书籍名称
- jquery中的事件
- 鸟哥的Linux私房菜11.1 核心编译与管理