65.9K
CodeProject 正在变化。 阅读更多。
Home

C# 中的进程间通信

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.51/5 (20投票s)

2007年7月12日

CPOL
viewsIcon

111791

downloadIcon

5111

此应用程序演示了如何使用 WM_COPYDATA 在应用程序之间发送和接收消息。

引言

此应用程序演示了如何使用 WM_COPYDATA 在两个应用程序之间发送和接收消息。

有两个示例。一个是 testmessage 应用程序,另一个是 testMessage2 应用程序。testmessage 将检查并打开应用程序 2(如果它未运行),如果已运行,则会启动另一个具有不同窗口标题的实例。

  • '发送' 按钮会将文本框中的文本发送到 testMessage2 应用程序。
  • 接收到的数据将显示在文本框中。

Using the Code

数据交换是通过查找另一个应用程序(使用 FindWindow)并将 WM_COPYDATA 消息发送到该窗口来执行的。

 public static bool SendArgs(IntPtr targetHWnd, string args)
        {
            Win32.CopyDataStruct cds = new Win32.CopyDataStruct();
            try
            {
                cds.cbData = (args.Length + 1) * 2;
                cds.lpData = Win32.LocalAlloc(0x40, cds.cbData);
                Marshal.Copy(args.ToCharArray(), 0, cds.lpData, args.Length);
                cds.dwData = (IntPtr)1;
                Win32.SendMessage(targetHWnd, Win32.WM_COPYDATA, IntPtr.Zero, ref cds);
            }
            finally
            {
                cds.Dispose();
            }

            return true;
        } 
protected override void WndProc(ref Message m){
            switch(m.Msg){
                case Win32.WM_COPYDATA:
                    Win32.CopyDataStruct st =
            	  (Win32.CopyDataStruct)Marshal.PtrToStructure(m.LParam,             
		  typeof(Win32.CopyDataStruct));
                    string strData = Marshal.PtrToStringUni(st.lpData);
                    txtmessagereceive.Text = strData;
                    break;

                default:
                    // let the base class deal with it
                    base.WndProc(ref m);
                    break;
            }
        }

历史

  • 2007 年 7 月 12 日:初始发布
© . All rights reserved.