zoukankan      html  css  js  c++  java
  • c# 进程间通讯 COPYDATA

    发送端:

    static void Main(string[] args)
            {
                while(true)
                {
                    String strInput = Console.ReadLine();
                    if (strInput == "q")
                        break;

                    int hPdf = IPCTool.FindWindow(null, @"pdfWatermark0");
                    if (hPdf != 0)
                    {
                        IPCTool.COPYDATASTRUCT cds;
                        cds.dwData = (IntPtr)256;
                        cds.lpData = "hello cSharpTestConsole";
                        cds.cbData = 256;


                        IPCTool.SendMessage(hPdf, 0x004A, 0, ref cds);
                    }
                }
            }

    接收端:

    // override window proc
            protected override void DefWndProc(ref Message m)
            {
                switch(m.Msg)
                {
                    case 0x004A:
                        {
                            IPCTool.COPYDATASTRUCT cdata = new IPCTool.COPYDATASTRUCT();
                            
                          //cdata = (IPCTool.COPYDATASTRUCT)Marshal.PtrToStructure(m.LParam, typeof(IPCTool.COPYDATASTRUCT));

                            cdata = (IPCTool.COPYDATASTRUCT)m.GetLParam(cdata.GetType());

                        //  MessageBox.Show(cdata.lpData);
                            break;
                        }
                    default:
                        base.DefWndProc(ref m);
                        break;
                }
            }

    结构定义:

    public class IPCTool
        {
            public struct COPYDATASTRUCT
            {
                public IntPtr dwData;
                public int cbData;
                [MarshalAs(UnmanagedType.LPStr)]
                public string lpData;
            }

            [DllImport("User32.dll", EntryPoint = "SendMessage")]
            public static extern int SendMessage(
             int hWnd, //目标窗口的handle
             int Msg, // 消息
             int wParam, // 第一个消息参数
             ref COPYDATASTRUCT lParam // 第二个消息参数
             );

            [DllImport("User32.dll", EntryPoint = "FindWindow")]
            public static extern int FindWindow(string lpClassName, string
             lpWindowName);

            const int WM_COPYDATA = 0x004A;
        }

  • 相关阅读:
    Linux就该这么学(第一天)
    在虚拟机中使用Git
    Myeclipse的一些快捷键整理(转)
    SpringMVC框架应用
    动态网页开发基础
    jsp数据交互(二)
    jsp数据交互(一)
    复习数据结构(基于大话数据结构)
    IO及NIO的总结
    学习正则表达式笔记
  • 原文地址:https://www.cnblogs.com/Safe3/p/1838192.html
Copyright © 2011-2022 走看看