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;
      }
    }
  • 相关阅读:
    JVM-Java程序性能监控-初级篇
    一段获取app性能指标的py脚本
    一段从TXT导入excel的py脚本
    matplotlib根据Y轴数量伸缩画图的py脚本
    jsonpath读取json数据格式公用方法!!!
    python安装插件包注意事项
    Jenkins持续集成
    Jenkins简介&邮箱配置
    unittest框架扩展(基于代码驱动)自动化-下
    unittest框架扩展(自动生成用例)自动化-上
  • 原文地址:https://www.cnblogs.com/rinack/p/4260069.html
Copyright © 2011-2022 走看看