C#中使用SendMessage进行进程通信,可发送字符串,结构体(不能发送类类型)。
发送时只能以结构体形式发送,类的话会提示“指定结构必须能直接复制到本机结构中,或是具有布局信息 ”的错误提示
以下两种结构体示例都可以被发送
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进行进程通信,可发送字符串,结构体(不能发送类类型)。相关推荐
- C#中使用SendMessage进行进程通信,可以发送字符串(转载)
转自:https://i.cnblogs.com/EditArticles.aspx?opt=1 /// <summary> /// 定义结构体 ...
- Linux进程描述符task struct结构体详解--Linux进程的管理与调度(一)
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 日期 内 ...
- matlab二重指针,VC++中函数返回数组指针或者带指针的结构体的编译方式是否可取? - 程序语言 - 小木虫 - 学术 科研 互动社区...
libralibra 构造函数+析构函数应该是比较正规的做法吧, 你的结构体/类被提早释放的问题,是不是那个结构体是局部变量,当超出作用域时对象被销毁,如果存在析构函数,会被默认调用, 如果你返回结构 ...
- 【C 语言】结构体 ( 结构体中嵌套一级指针 | 分配内存时先 为结构体分配内存 然后再为指针分配内存 | 释放内存时先释放 指针成员内存 然后再释放结构头内存 )
文章目录 一.结构体中嵌套一级指针 1.声明 结构体类型 2.为 结构体 变量分配内存 ( 分配内存时先 为结构体分配内存 然后再为指针分配内存 ) 3.释放结构体内存 ( 释放内存时先释放 指针成员 ...
- Linux中的两个经典宏定义:获取结构体成员地址,根据成员地址获得结构体地址;Linux中双向链表的经典实现。...
倘若你查看过Linux Kernel的源码,那么你对 offsetof 和 container_of 这两个宏应该不陌生.这两个宏最初是极客写出的,后来在Linux内核中被推广使用. 1. offse ...
- 有n个学生的信息,放在结构体数组中,要求输出全部学生的信息。 ← 结构体指针
[问题描述] 有n个学生的信息,放在结构体数组中,要求输出全部学生的信息. [算法分析] %10s -- 右对齐,占位符10位 %-10s -- 左对齐,占位符10位 [算法代码] #include ...
- linux 环境下的进程间的通信——消息队列传输结构体
linux 环境下的进程间的通信方式主要有:管道,有名和无名管道, 这种方式适用于具有亲缘关系的进程之间的通信: 信号: 消息队列: 共享内存: 信号量: 套接字: 这次主要涉及消息队列: 1. 需要 ...
- matlab向结构体中的数组自动赋值_数组 – 在Matlab结构体数组的每个元素中更新一个字段...
只是一个说明,交易是不必要的: [arr.val] = newVals{:}; % achieves the same as deal(newVals{:}) 唯一的其他方式我知道如何做(没有foor ...
- c语言如何引入第三方库,在Rust中,如何从第三方库定义或导入C结构体?
Rust FFI指南( http://static.rust-lang.org/doc/master/guide-ffi.html)很好地演示了如何导入使用由Rust std :: lib库(例如si ...
最新文章
- Python正则表达式re模块简明笔记
- 话里话外:信息整合之障
- qt 中 设置 背景的方法
- MySQL注入中load_file()函数的应用
- 利用Axis2默认口令安全漏洞入侵WebService网站
- statusbar 尺寸 显示图标_StatusBar 图标展示流程 - 状态栏(StatusBar)镜头布局分析...- git完代码后的异常_169IT.COM...
- 【渝粤题库】广东开放大学 文化投资与贸易 形成性考核
- unity中发布android时候出现这样的提示错误:error:device not found
- Java笔记-连接本地代理服务
- PEAR简介:用PEAR来写你的下一个php程序
- 让媒体播放控件,播放媒体 0201
- [FJWC2018]全排列
- numpy和pandas官方文档中文版分享
- javascript 高级程序设计(第4版)阅读笔记(一)
- Buddy/Sponsor培训•信任的构建
- pkg打包node项目文件
- 如何把网站从万网转到百度的服务器,百度域名服务上线“域名转入”功能 附转入教程...
- 密钥mysql_MySQL加密和密钥管理
- FPGA引脚功能说明与分析
- 冰点还原精灵使用技巧
热门文章
- 螺旋矩阵 IIPython解法
- LT8920无线通讯程序
- android可点击的列表,如何在Android的可扩展列表视图中的子点击...
- c语言简单密码字符a用f代替,c语言实验.doc
- matlab调用opencv库,matlab调用opencv库
- php+header+跳转输出,php利用header跳转怎么失效了?
- log4j slf4j实现_slf4j 与log4j logback的区别以及使用场景
- mysql navicat 函数_Navicat for MySQL 函数高级属性讲解
- python连不上树莓派_Python实现树莓派WiFi断线自动重连
- esp32摄像显示时间_科普系列 || 第一弹~基于ESP32的WiFi连接