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

  • 相关阅读:
    image 和 barplot 的组合
    par函数mgp 参数-控制坐标轴的位置
    R语言绘图时的边界碰撞问题
    R语言绘制花瓣图flower plot
    mothur 计算稀释性曲线
    R语言 vegan包计算物种累计曲线
    R语言数据框小技巧
    tophat-fusion 鉴定融合基因
    FusionCancer-人类癌症相关的融合基因的数据库
    rrnDB数据库简介-16S基因多拷贝数的证据
  • 原文地址:https://www.cnblogs.com/Safe3/p/1838192.html
Copyright © 2011-2022 走看看