Windows提高_1.4进程通信
进程通信
使用 WM_COPYDATA
客户端(发送端)
// 1. 找到窗口程序
HWND hWnd = FindWindow(NULL, L"Window1");
// 2. 构建一个 COPYDATASTRUCT 结构体
COPYDATASTRUCT CopyData = { };
CopyData.dwData = 0x100; // 要传递的一个4字节数据,通常是类型
CopyData.cbData = 0x0A; // 存储数据的缓冲区大小
CopyData.lpData = (LPVOID)"Hello15pb"; // 指向要发送的数据
// 3. 发送数据给对象的窗口
SendMessage(hWnd, WM_COPYDATA, NULL, (LPARAM)&CopyData);服务端(接收端)
// 响应 WM_COPYDATA 消息
case WM_COPYDATA:
{
// 1. 获取 LPARAM 只想的内容
auto CopyData = (PCOPYDATASTRUCT)lParam;
// 2. 输出内容
MessageBoxA(hWnd, (LPCSTR)CopyData->lpData, "WM_COPYDATA", MB_OK);
break;
}
使用 邮槽内核对象
客户端(发送端)
// 1. 打开邮槽对象
HANDLE hFile = CreateFile(
L"\\\\.\\mailslot\\Sample", // 邮槽名称
GENERIC_WRITE, // 读写属性
FILE_SHARE_READ, // 共享属性
NULL, // 安全属性
OPEN_EXISTING, // 打开方式
FILE_ATTRIBUTE_NORMAL, // 标志位
NULL); // 文件模板(默认留空)
// 2. 向mailslot写入
DWORD dwWritten = ;
WriteFile(hFile, "Hello", , &dwWritten, NULL);
// 3. 结束
printf("已经向邮槽写入信息!\n");
CloseHandle(hFile);服务端(接收端)
// 1. 创建邮槽对象
HANDLE hSlot = CreateMailslot(
L"\\\\.\\mailslot\\Sample", // 邮槽名
, // 不限制消息大小
MAILSLOT_WAIT_FOREVER, // 无超时
NULL); // 安全属性
// 2. 循环读取邮槽信息
while (true)
{
// 2.1 获取邮槽消息数量
DWORD dwMsgCount = , dwMsgSize = ;
// 2.2 获取邮槽信息
GetMailslotInfo(
hSlot, // 邮槽句柄
NULL, // 无最大消息限制
&dwMsgSize, // [ 下一条消息的大小 ]
&dwMsgCount, // [ 消息的总数量 ]
NULL); // 无时限
// 2.3 如果没有接收到消息,那么久休眠一阵子
if (dwMsgSize == MAILSLOT_NO_MESSAGE)
{
Sleep();
continue;
}
// 2.4 循环获取全部消息(有可能不只一条)
while (dwMsgCount)
{
DWORD dwRet = ;
PBYTE lpBuffer = new BYTE[dwMsgSize]{ };
// 2.5 读取邮槽中的信息
if (!ReadFile(hSlot, lpBuffer, dwMsgSize, &dwRet, NULL))
{
printf("ReadFile函数执行失败,错误码:%d.\n", GetLastError());
delete[] lpBuffer;
return ;
}
printf("邮槽的内容: %s\n", lpBuffer);
// 2.6 计算剩余的消息数
GetMailslotInfo(hSlot, (LPDWORD)NULL, &dwMsgSize, &dwMsgCount, nullptr);
delete[] lpBuffer;
}
}
Windows提高_1.4进程通信的更多相关文章
- Windows提高_1.2遍历进程、遍历模块
进程 什么是进程? 通俗的来讲,进程就是一个运行中的程序,最少包含一个虚拟空间,通常是 4 GB大小,一组提供数据和代码的模块,通产是 dll 和 exe 文件,一个进程内核对象和最少一个线程. 进程 ...
- Windows提高_1.3文件操作
文件操作 不带句柄的文件操作 // 1. 拷贝文件,第三个参数为 FALSE 表示会覆盖 // CopyFile(L"D:\\1.txt", L"E:\\2.txt&qu ...
- Windows提高_1.1内核对象
内核对象 什么是内核对象? 内核对象本质上是一个结构体,我们不能直接的操作一个内核对象,需要通过操作系统提供的一系列函数和我们使用的内核对象句柄对它进行一系列的修改. 如何操作内核对象? 创建一个内核 ...
- 进程以及进程通信(IPC)类型
这里用我有限的知识来解释同时参考了一些其他博主的子类,希望能给与一部分入门的朋友一个清晰的理解,有问题之处还请指出 首先简单谈一下什么是进程? 答:进程是装入内存运行的程序段,是许多的系统对象拥有权的 ...
- Windows线程+进程通信
一 Windows线程进程 1)定义 按照MS的定义, Windows中的进程简单地说就是一个内存中的可执行程序, 提供程序运行的各种资源. 进程拥有虚拟的地址空间, 可执行代码, 数据, 对象句柄集 ...
- Windows进程通信 -- 共享内存(1)
共享内存的方式原理就是将一份物理内存映射到不同进程各自的虚拟地址空间上,这样每个进程都可以读取同一份数据,从而实现进程通信.因为是通过内存操作实现通信,因此是一种最高效的数据交换方法. 共享内存在 W ...
- Windows进程通信 -- 共享内存
享内存的方式原理就是将一份物理内存映射到不同进程各自的虚拟地址空间上,这样每个进程都可以读取同一份数据,从而实现进程通信.因为是通过内存操作实现通信,因此是一种最高效的数据交换方法. 共享内存在 Wi ...
- Windows进程通信之一看就懂的匿名管道通信
目录 进程通信之一看就懂的匿名管道通信 一丶匿名管道 1.1何为匿名管道 1.2创建匿名管道需要注意的事项 1.3 创建匿名管道需要的步骤 1.4代码例子 1.5代码运行截图 进程通信之一看就懂的匿名 ...
- Windows进程通信-共享内存空间
三个模块 1,game.exe,三个方法,控制台输入指令('A','B','R')分别控制三个方法的调用: 2,WGDll.dll,要注入到game进程中的dll文件: 3,myconsole.exe ...
随机推荐
- DG备库磁盘空间满导致无法创建归档
上周五去某客户那里做数据库巡检.是window 2008系统上10g的一套NC系统的库,已经配置了DG,可是巡检时发现数据库报错: Tue Nov 11 10:13:57 2014 LNS: Stan ...
- php生成二维码2
<?php include "phpqrcode.php"; $value = "http://huizhongda.taobao.com/"; $err ...
- 一些Razor语法
Layout asp.net mvc中的一些子视图忽然不行了,点击主视图后发现没有弹出来. 通过浏览器调试,发现打开子视图时,加载了大量的JS,CSS等.真奇怪啊,这些都是在主视图加载的啊,怎么子视图 ...
- initial ram disk
1 什么是initial ram disk 它就是一个做好了的文件系统,其存储空间是ram.在kernel启动的第一个阶段,会被mount成根文件系统. 2 为什么需要initial ram disk ...
- lvm调整分区大小
1 问题 /home分区占用空间比较大,而/var分区比较小,它们位于同一个磁盘上.该系统安装了lvm. 2 减少/home分区空间 2.1 卸载/home umount /home 2.2 检查文件 ...
- css3 3d特效汇总
本篇全是实战,没有基础,如果不明白3d特效的原理,可能会看不懂,不过没关系,给你推荐一下 张鑫旭css3 3d转换,或者看我的另一篇博客 css3 2d转换3d转换以及动画的知识点汇总,看完这些3d ...
- Bootstrap4 网格系统
学习注意事项 col-*-* 第一个*是设备类型,第二个*是控件宽度的占比 屏幕被等分为12,col-1宽度是1/12,col-6宽度是50%,col-12宽度是100% 给应用了class的elem ...
- Linux下Redis的安装和部署 详细
一.Redis介绍 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多 ...
- [luogu2620]虫洞
https://www.zybuluo.com/ysner/note/1284536 题面 给一个一维坐标系,出发点为\(0\),目标点为\(w\). 每\(1\)秒可以往后移不超过\(s\)个单位距 ...
- LED全彩显示屏色度空间
摘要:LED全彩显示屏.LED电子大屏幕如果要有一个良好的视觉效果,其中色度占有一席重要的位置,那么该如何让LED显示屏的色度更均匀.合理呢,下面为大家总结出以下几点,供大家参考. LED全彩显示屏. ...