发送时只能以结构体形式发送,类的话会提示“指定结构必须能直接复制到本机结构中,或是具有布局信息 ”的错误提示

以下两种结构体示例都可以被发送

public struct A
    {
        public A(int a)
        {
            name = "heow";
            array = new double[3] { 1, 2, 5.6 };
        }
         string name;//{ get; set; }
         double[] array ;//{ get; set; }
    }

/// <summary>
        /// 定义结构体
        /// </summary>
        public struct COPYDATASTRUCT
        {
            public IntPtr dwData; //可以是任意值
            public int cbData;    //指定lpData内存区域的字节数
            [MarshalAs(UnmanagedType.LPStr)]
            public string lpData; //发送给目录窗口所在进程的数据
        }

发送方:

[DllImport("User32.dll", EntryPoint = "SendMessage")]
        private static extern int SendMessage(int hWnd, int Msg, int wParam, ref COPYDATASTRUCT lParam);
 
        [DllImport("User32.dll", EntryPoint = "FindWindow")]
        private static extern int FindWindow(string lpClassName, string lpWindowName);

const int WM_COPYDATA = 0x004A;//必须是这个数值,不能更改
 
        private void btnSend_Click(object sender, EventArgs e)
        {
            int hWnd = FindWindow(null, @"消息接受者");
            if (hWnd == 0)
            {
                MessageBox.Show("未找到消息接受者!");
            }
            else
            {
                string sendString = "测试发送数据";
                byte[] sarr = System.Text.Encoding.Default.GetBytes(sendString);
                int len = sarr.Length;
                COPYDATASTRUCT cds;
                cds.dwData = (IntPtr)0 ;
                cds.cbData = len + 1;
                cds.lpData = sendString;
                SendMessage(hWnd, WM_COPYDATA, 0, ref cds);
            }

}

接受方:

    private static int WMA_InterPro = 0x004A;
        protected override void DefWndProc(ref Message m)
        {
          
            if (m.Msg == WMA_InterPro)
            {
                COPYDATASTRUCT cds = new COPYDATASTRUCT();
                Type t = cds.GetType();
                cds = (COPYDATASTRUCT)m.GetLParam(t);
               string receiveInfo=cds.lpData;  
            }
             else
            {
                base.DefWndProc(ref m);
            }
        }

C#中使用SendMessage进行进程通信,可发送字符串,结构体(不能发送类类型)。相关推荐

  1. C#中使用SendMessage进行进程通信,可以发送字符串(转载)

    转自:https://i.cnblogs.com/EditArticles.aspx?opt=1         /// <summary>         /// 定义结构体       ...

  2. Linux进程描述符task struct结构体详解--Linux进程的管理与调度(一)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 日期 内 ...

  3. matlab二重指针,VC++中函数返回数组指针或者带指针的结构体的编译方式是否可取? - 程序语言 - 小木虫 - 学术 科研 互动社区...

    libralibra 构造函数+析构函数应该是比较正规的做法吧, 你的结构体/类被提早释放的问题,是不是那个结构体是局部变量,当超出作用域时对象被销毁,如果存在析构函数,会被默认调用, 如果你返回结构 ...

  4. 【C 语言】结构体 ( 结构体中嵌套一级指针 | 分配内存时先 为结构体分配内存 然后再为指针分配内存 | 释放内存时先释放 指针成员内存 然后再释放结构头内存 )

    文章目录 一.结构体中嵌套一级指针 1.声明 结构体类型 2.为 结构体 变量分配内存 ( 分配内存时先 为结构体分配内存 然后再为指针分配内存 ) 3.释放结构体内存 ( 释放内存时先释放 指针成员 ...

  5. Linux中的两个经典宏定义:获取结构体成员地址,根据成员地址获得结构体地址;Linux中双向链表的经典实现。...

    倘若你查看过Linux Kernel的源码,那么你对 offsetof 和 container_of 这两个宏应该不陌生.这两个宏最初是极客写出的,后来在Linux内核中被推广使用. 1. offse ...

  6. 有n个学生的信息,放在结构体数组中,要求输出全部学生的信息。 ← 结构体指针

    [问题描述] 有n个学生的信息,放在结构体数组中,要求输出全部学生的信息. [算法分析] %10s --  右对齐,占位符10位 %-10s -- 左对齐,占位符10位 [算法代码] #include ...

  7. linux 环境下的进程间的通信——消息队列传输结构体

    linux 环境下的进程间的通信方式主要有:管道,有名和无名管道, 这种方式适用于具有亲缘关系的进程之间的通信: 信号: 消息队列: 共享内存: 信号量: 套接字: 这次主要涉及消息队列: 1. 需要 ...

  8. matlab向结构体中的数组自动赋值_数组 – 在Matlab结构体数组的每个元素中更新一个字段...

    只是一个说明,交易是不必要的: [arr.val] = newVals{:}; % achieves the same as deal(newVals{:}) 唯一的其他方式我知道如何做(没有foor ...

  9. c语言如何引入第三方库,在Rust中,如何从第三方库定义或导入C结构体?

    Rust FFI指南( http://static.rust-lang.org/doc/master/guide-ffi.html)很好地演示了如何导入使用由Rust std :: lib库(例如si ...

最新文章

  1. Python正则表达式re模块简明笔记
  2. 话里话外:信息整合之障
  3. qt 中 设置 背景的方法
  4. MySQL注入中load_file()函数的应用
  5. 利用Axis2默认口令安全漏洞入侵WebService网站
  6. statusbar 尺寸 显示图标_StatusBar 图标展示流程 - 状态栏(StatusBar)镜头布局分析...- git完代码后的异常_169IT.COM...
  7. 【渝粤题库】广东开放大学 文化投资与贸易 形成性考核
  8. unity中发布android时候出现这样的提示错误:error:device not found
  9. Java笔记-连接本地代理服务
  10. PEAR简介:用PEAR来写你的下一个php程序
  11. 让媒体播放控件,播放媒体 0201
  12. [FJWC2018]全排列
  13. numpy和pandas官方文档中文版分享
  14. javascript 高级程序设计(第4版)阅读笔记(一)
  15. Buddy/Sponsor培训•信任的构建
  16. pkg打包node项目文件
  17. 如何把网站从万网转到百度的服务器,百度域名服务上线“域名转入”功能 附转入教程...
  18. 密钥mysql_MySQL加密和密钥管理
  19. FPGA引脚功能说明与分析
  20. 冰点还原精灵使用技巧

热门文章

  1. 螺旋矩阵 IIPython解法
  2. LT8920无线通讯程序
  3. android可点击的列表,如何在Android的可扩展列表视图中的子点击...
  4. c语言简单密码字符a用f代替,c语言实验.doc
  5. matlab调用opencv库,matlab调用opencv库
  6. php+header+跳转输出,php利用header跳转怎么失效了?
  7. log4j slf4j实现_slf4j 与log4j logback的区别以及使用场景
  8. mysql navicat 函数_Navicat for MySQL 函数高级属性讲解
  9. python连不上树莓派_Python实现树莓派WiFi断线自动重连
  10. esp32摄像显示时间_科普系列 || 第一弹~基于ESP32的WiFi连接