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;
        }

  • 相关阅读:
    《当程序员的那些狗日日子》(二十七)大项目
    《当程序员的那些狗日日子》(四十二)内心的挣扎
    《当程序员的那些狗日日子》(二十一)加班,加班
    《当程序员的那些狗日日子》(三十四)人事变动
    《当程序员的那些狗日日子》(五十二)同学情与差距
    《当程序员的那些狗日日子》(四十四)是办公室还是牢房
    《当程序员的那些狗日日子》(四十七)躁动的空气
    《当程序员的那些狗日日子》(三十七)黯然离去
    《当程序员的那些狗日日子》(十六)告别
    《当程序员的那些狗日日子》(二十三)死在了今天的晚上
  • 原文地址:https://www.cnblogs.com/Safe3/p/1838192.html
Copyright © 2011-2022 走看看