您的位置:首页 > 教程文章 > 编程开发

WinForm实现跨进程通信的方法

:0 :2021-04-22 22:14:43

本文实例展示了WinForm实现跨进程通信的方法,分享给大家供大家参考之用。具体方法如下:
主要功能代码如下:
public class WinMessageHelper
{
private struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}
//使用COPYDATA进行跨进程通信
public const int WM_COPYDATA = 0x004A;
[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 COPYDATASTRUCT lParam // second message parameter
);
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern int FindWindow(string lpClassName, string lpWindowName);
///


/// 发送消息
///

///接收方窗体标题名称
///要发送的数据
public static void Send(string windowReceiveTitle, string strData)
{
int winHandler = FindWindow(null,windowReceiveTitle);
if (winHandler != 0)
{
byte[] sarr = System.Text.Encoding.Default.GetBytes(strData);
int len = sarr.Length + 1;
COPYDATASTRUCT cds;
cds.dwData = (IntPtr)100;
cds.lpData = strData;
cds.cbData = len;
SendMessage(winHandler, WM_COPYDATA, 0, ref cds);
}
}
///
/// 接收消息
///

///
/// 在窗体中覆盖接收消息函数
/// protected override void DefWndProc(ref System.Windows.Forms.Message m)
/// {
/// switch(m.Msg)
/// {
/// case WinMessageHelper.WM_COPYDATA:
/// string str = WinMessageHelper.Receive(ref m);
/// break;
/// default:
/// base.DefWndProc(ref m);
/// break;
///
/// }
/// }
///

/// 接收的到数据
public static string Receive(ref System.Windows.Forms.Message m)
{
COPYDATASTRUCT cds = new COPYDATASTRUCT();
Type cdsType = cds.GetType();
cds = (COPYDATASTRUCT)m.GetLParam(cdsType);
return cds.lpData;
}
}
希望本文所述实例对大家C#程序设计有所帮助。

C# Winform实现捕获窗体最小化、最大化、关闭按钮事件的方法
C#之WinForm WebBrowser实用技巧汇总

同类资源