WinForm实现跨进程通信的方法

 更新时间:2014年08月26日 16:25:46   投稿:shichen2014  
这篇文章主要介绍了WinForm实现跨进程通信的方法,通过一个WinMessageHelper类实现这一功能,需要的朋友可以参考下

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

相关文章

  • Unity实现旋转扭曲图像特效

    Unity实现旋转扭曲图像特效

    这篇文章主要为大家详细介绍了Unity实现旋转扭曲图像特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • C# IEnumerator枚举器的具体使用

    C# IEnumerator枚举器的具体使用

    本文主要介绍了C# IEnumerator枚举器的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • C#使用webbrowser的常见用法实例

    C#使用webbrowser的常见用法实例

    这篇文章主要介绍了C#使用webbrowser的常见用法,涉及C#使用webbrowser实现判断网络连接、模拟登陆、点击等常用技巧,需要的朋友可以参考下
    2015-08-08
  • c# 如何实现一个简单的json解析器

    c# 如何实现一个简单的json解析器

    这篇文章主要介绍了c# 如何实现一个简单的json解析器,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • 利用Aspose.Word控件实现Word文档的操作

    利用Aspose.Word控件实现Word文档的操作

    偶然一次机会,一个项目的报表功能指定需要导出为Word文档,因此寻找了很多篇文章,不过多数介绍的比较简单一点,于是也参考了官方的帮助介绍,终于满足了客户的需求。下面我由浅入深来介绍这个控件在实际业务中的使用过程吧
    2013-05-05
  • c# 实现子窗口关闭父窗口也关闭的方法

    c# 实现子窗口关闭父窗口也关闭的方法

    下面小编就为大家带来一篇c# 实现子窗口关闭父窗口也关闭的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • C#封装的常用文件操作类实例

    C#封装的常用文件操作类实例

    这篇文章主要介绍了C#封装的常用文件操作类,实例分析了C#文件操作的技巧,涉及C#的读写、复制、删除等常用操作,非常具有实用价值,需要的朋友可以参考下
    2015-03-03
  • unity制作瞄准镜效果

    unity制作瞄准镜效果

    这篇文章主要为大家详细介绍了unity制作瞄准镜效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • C#操作ini文件的帮助类

    C#操作ini文件的帮助类

    这篇文章介绍了C#操作ini文件的帮助类,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • 配置C#的系统环境变量的方法

    配置C#的系统环境变量的方法

    配置C#的系统环境变量的方法...
    2007-03-03

最新评论