c#下使用WM_COPYDATA

 
        [DllImport("User32.dll")]
        public static extern int SendMessage(IntPtr hwnd, int msg, int wParam, ref COPYDATASTRUCT lParam);
 
 
        public const int WM_COPYDATA = 0x004A;
 
        /// <summary>
        /// WM_COPYDATA消息,进程间传输信息专用结构
        /// </summary>
        public struct COPYDATASTRUCT
        {
            public IntPtr dwData;//类型必须IntPtr,用来自动适应32位 64位
            public int cbData;
 
            public Intptr lpData;
 
        }

发送消息:

                string msg = "asdf";
                byte[] sarr = Encoding.Default.GetBytes(msg);
                COPYDATASTRUCT cds;
                cds.dwData = IntPtr.Zero;                                   //可以是任意值
                cds.cbData = sarr.Length;                               //指定lpData内存区域的字节数
                cds.lpData = Marshal.UnsafeAddrOfPinnedArrayElement(sarr,0);  //发送给目标窗口所在进程的数据
 
                SendMessage(hdl, WM_COPYDATA, 0, ref cds);

 

posted @ 2020-12-25 12:56  IWing  阅读(1038)  评论(0编辑  收藏  举报