当前位置: 移动技术网 > IT编程>开发语言>c# > WinForm实现跨进程通信的方法

WinForm实现跨进程通信的方法

2019年07月18日  | 移动技术网IT编程  | 我要评论
本文实例展示了winform实现跨进程通信的方法,分享给大家供大家参考之用。具体方法如下: 主要功能代码如下: public class winmessageh

本文实例展示了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#程序设计有所帮助。

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网