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命令学习笔记:cut详解
    浏览器url传参中文时得到null的解决方法
    jQuery给控件赋值....
    Myeclipse 错误An internal error has occurred 解决办法
    浏览器发送URL的编码特性
    DEBUG -- CLOSE BY CLIENT STACK TRACE问题的两种解决方案,整理自网络
    解决Maven中OutOfMemory错误
    java中的URLEncoder和URLDecoder类;中文在地址栏中的处理
    关于CLOSE BY CLIENT STACK TRACE
    Hibernate复合主键映射
  • 原文地址:https://www.cnblogs.com/Safe3/p/1838192.html
Copyright © 2011-2022 走看看