zoukankan      html  css  js  c++  java
  • 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;
      }
    }
  • 相关阅读:
    mysql主从复制
    nginx代理tcp协议连接mysql
    spark安装配置
    DataX 3.0简介 安装及使用
    Consul 快速入门
    Etcd 使用入门
    常见负载均衡算法
    Container is running beyond memory limits
    HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}
    快速搞定Windows10环境下hadoop安装和配置
  • 原文地址:https://www.cnblogs.com/rinack/p/4260069.html
Copyright © 2011-2022 走看看