1. 程式人生 > >WinForm實現跨進程通信的方法

WinForm實現跨進程通信的方法

sage 跑步 extern text dddd line add 格式化 title

本文實例展示了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#程序設計有所幫助。

除聲明外,跑步客文章均為原創,轉載請以鏈接形式標明本文地址
WinForm實現跨進程通信的方法

本文地址: http://www.paobuke.com/develop/c-develop/pbk23590.html






相關內容

技術分享圖片WPF中button重載樣式技術分享圖片C#小數點格式化用法小結技術分享圖片C# Winform 子窗體訪問父級窗體的控件和屬性技術分享圖片實現ASP.NET無刷新下載並提示下載完成的開發思路
技術分享圖片C#實現遠程關閉計算機或重啟計算機的方法技術分享圖片C#實現復制文件夾中文件到另一個文件夾的方法技術分享圖片C#圖像處理之木刻效果實現方法技術分享圖片C#托管堆對象實例包含內容分析

WinForm實現跨進程通信的方法