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;
      }
    }
  • 相关阅读:
    函数的调用过程
    Android基础-弹出式菜单
    Android基础-上下文菜单(Content_Menu)
    Adnroid基础-选项菜单(OptionMenu)
    Android基础-UI界面(项目实战 点菜界面) 1.EditText 2.SeekBar 3.CheckBox 4.ToggleButton 5.RadioGroup 6.Button 7.TextView 8.ImageView
    Android基础-进度条(SeekBar)
    Android基础-开关按钮(ToggleButton)
    Android基础-单选框(RadioButton)
    显示应用名称
    在Xcode中使用pch文件
  • 原文地址:https://www.cnblogs.com/rinack/p/4260069.html
Copyright © 2011-2022 走看看