下你所需,载你所想!
汇集开发技术源码资料

跨进程内存读写例子源代码

:5.847KB :1 :2019-12-25 09:10:41

部分简介

.如果真 (消息值 = 10086) ' 约定的消息值是10086
' 约定好的是参数1为进程ID,参数2为内存地址
进程句柄 = OpenProcess (#PROCESS_ALL_ACCESS, 0, 参数1) ' 先取进程句柄,程序B要对程序A进行操作
.如果真 (进程句柄 = 0) ' 打开进程失败,那就操作不了了,只能返回-1 表示失败
返回 (-1)
.如果真结束
ReadProcessMemory (进程句柄, 参数2 - 4, 取变量地址 (内存大小), 4, 0) ' 先取一下程序A传过来的内存块长度
写入的数据 = 到字节集 (编辑框1.内容)
写入的长度 = 取字节集长度 (写入的数据)
.如果真 (写入的长度 > 内存大小) ' 内存大小不足
CloseHandle (进程句柄)
返回 (写入的长度) ' 返回需要的长度
.如果真结束
是否成功 = WriteProcessMemory (进程句柄, 参数2, 取变量数据地址 (写入的数据), 写入的长度, 实际写入长度)
CloseHandle (进程句柄) ' 关闭进程句柄
.如果真 (是否成功 = 假)
返回 (-1) ' 写入失败的话,返回-1告诉一下程序A写入失败
.如果真结束
返回 (实际写入长度) ' 否则返回一下实际写入的长度
.如果真结束
返回 (CallWindowProcA (原过程地址, 窗口句柄, 消息值, 参数1, 参数2))

程序B窗口句柄 = FindWindowExA (0, 0, “跨进程读写例子”, 字符 (0)) ' 取到程序B的窗口句柄,自己想办法获取,例子就这么获取
.如果真 (本进程ID = 0)
本进程ID = GetCurrentProcessId ()
.如果真结束
.如果真 (程序B窗口句柄 = 0)
信息框 (“程序B没有打开”, 0, , )
返回 ()
.如果真结束
内存大小 = 1024 ' 大小随意,足够写入就行
申请的内存 = 取空白字节集 (内存大小) ' 取空白字节集也是在申请内存,而且还不用手动释放这个地址
内存地址 = 取变量数据地址 (申请的内存) ' 懒得去扣汇编,直接用特殊库的这个命令....
程序B返回的内容 = SendMessageA (程序B窗口句柄, 10086, 本进程ID, 内存地址)
.判断开始 (程序B返回的内容 = -1) ' 做个约定,-1表示失败,大于内存大小表示缓冲区大小不够,返回的是缓冲区需要的大小
编辑框1.内容 = “写入失败”
返回 ()
.判断 (程序B返回的内容 > 内存大小)
申请的内存 = 取空白字节集 (程序B返回的内容) ' 长度不够,重新申请更大的缓冲区
内存地址 = 取变量数据地址 (申请的内存) ' 懒得去扣汇编,直接用特殊库的这个命令....
程序B返回的内容 = SendMessageA (程序B窗口句柄, 10086, 本进程ID, 内存地址)
.默认
' 否则就是写入成功了
.判断结束
编辑框1.内容 = 到文本 (取字节集左边 (申请的内存, 程序B返回的内容))
编辑框1.加入文本 (#换行符 + “程序B一共往程序A写入了” + 到文本 (程序B返回的内容) + “个字节”)

跨进程内存读写例子源代码

热门推荐

相关文章