首页 > 编程 > C# > 正文

WinForm实现跨进程通信的方法

2020-01-24 02:28:30
字体:
来源:转载
供稿:网友

本文实例展示了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);  /// <summary>  /// 发送消息  /// </summary>  /// <param name="windowReceiveTitle">接收方窗体标题名称</param>  /// <param name="strData">要发送的数据</param>  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);    }  }  /// <summary>  /// 接收消息  /// </summary>  /// <example>  /// 在窗体中覆盖接收消息函数  /// 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;  ///   ///   }  /// }  /// </example>  /// <returns>接收的到数据</returns>  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#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表