Win9x下程序间的数据传递

Win11高DPI屏幕下旧版EXE界面模糊的终极修复指南 DPI(每英寸点数)缩放是现代操作系统处理高分辨率显示器的核心技术,其原理是通过虚拟化逻辑分辨率,将应用程序界面按比例放大以适应高像素密度屏幕。这项技术的核心价值在于平衡显示清晰度与界面可用性,确保用户在4K、5K等高清屏幕上获得舒适的视觉体验。在Windows系统,尤其是Win11中,DPI虚拟化与兼容性设置是解决显示问题的关键机制,广泛应用于老旧桌面软件、专业工具及经典游戏的显示优化。针对Win11家庭版用户无法使用组策略编辑器(gpedit.msc)的限制,本文深入解析了通过修改应用程序清单文件(Ma 阅读详情
大家知道在Window 9x中一个应用程序不能直接访问另一个程序的内存地址,因为WIN9x为每个运行中的进程提供了自己的虚拟空间,这起到了很好的保护作用,然而,它也使得两个程序间不能轻易的交换数据,但是这并不是说程序间就一定不能进行数据传送了,Win9x为我们提供了几个特殊的方法来实现这个目的,如通过Windows消息WM_CopyData 和存储影响文件等方法。
使用消息WM_CopyData传送需要传递的数据缓冲区的内存地址,前面讲过,我们不能从一个应用程序向另一个程序发送内存块的地址,因为一个虚拟存储空间中的地址在另一个地址空间中没有意义。但是WM_CopyData消息回在后台执行一些特殊操作之后在传递数据,因此我们能够在接受方得到正确的地址。该消息使用时需要传递正在发送消息的窗口的句柄,及一个指TCopyDataStruct结构的指针。该结构如下:
tagCOPYDATASTRUCT = packed record
dwData: DWORD;
//这是一个附加的32位参数;
cbData: DWORD;
//我们将要传递的数据缓冲区的大小;
lpData: Pointer;
//指向数据缓冲区的指针。
end;
TCopyDataStruct=tag COPYDATASTRUCT;
一个例子,SendData程序包含一个文本框,在它的OnChange事件中将文本框中的内容发送到GetData程序重并显示出来。
在SendCopyData程序里,文本框OnChange事件的处理函数如下:
procedure TForm1.InputEditChange(Sender: TObject);
var
cds: TCopyDataStruct;
ss: PChar;
targetHandle: THandle;
begin
cds.cbData:=Length(InputEdit.Text)+1;
GetMem(ss,cds.cbData); //申请cbData大小的缓冲区,并把指针赋给ss;
strCopy(ss,Pchar(InputEdit.text));
cds.lpData:=ss; //设置缓冲区指针
targetHandle:=FindWindow(′TForm1′,′GetCopyData′); //用API函数获取″GetCopyData″窗口句柄
if targetHandle=0 then
begin
ShowMessage(′Don′'t find target window′);
exit;
end;
SendMessage(targetHandle,WM_COPYDATA,Handle,Integer((@cds)));//将cds结构指针发送个目标窗口;
//targetHandle使目标窗口句柄;
//Handle 发送消息的窗口句柄;
FreeMem(ss);
end;
在GetCopyData程序中,通过一个定制的消息处理程序接受wm_CopyData消息:
public
procedure GetCopyData(var msg: TWMCopyData); message WM_COPYDATA;
procedure TForm1.GetCopyData(var msg: TWMCopyData);
begin
with msg.CopyDataStruct^ do
begin
Form1.Edit1.Text:=PChar(lpdata);
end;
end;
其中TWMCopyData结构定义如下:
TWMCopyData = record
Msg: Cardinal;
From: HWND; //发送该消息的窗口的句柄
CopyDataStruct: PCopyDataStruct; //即SendCopyData程序中cds结构的指针
Result: Longint;
end;
除了用wm_CopyData消息传递数据外,Windows还提供了File_Mapping内存共享技术用于实现程序间数据共享。使用与上例窗口相似的两个程序来说明
在MapWrite程序中:
Private
HMapFile: Thanale;
MapFilePointer: Pointer;
procedure TForm1.FormCreate(Sender: TObject);
begin
//使用API函数来建立映象文件
hMapFile:=CreateFileMapping(
$FFFFFFFF, //指定共享内存
nil,
Page_ReadWrite, //共享方式
0,
1000, //共享内存大小
′MyMappedFile′); //映象文件的名字
if hMapFile<>0 then //如果映象文件建立成功
//MapViewOfFile函数返回一个指向共享内存块的在该程序内存空间中有效的指针
MapFilePointer:=MapView OfFile(hMapFile,File-Map-All-Access,0,0,0)
else
ShowMessage(′Can′'t Create MapFile′);
if MapFilePointer=nil then
ShowMessage(′MapFilePointer=nil′);
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
StrCopy(PChar(MapFilePointer),PChar(Edit1.Text));//将文本框中的字符串copy到共享内存中
end;
在MapRead程序中使用API函数OpenFileMapping打开MapWrite程序中已建立的映象文件
procedure TForm1.FormCreate(Sender: TObject);
begin
hMapFile:=OpenFileMapping(FILE_MAP_READ,true,′MyMappedFile′); //取得′MyMappedFile′映象文件的句柄
if hMapFile<>0 then
MapFilePointer:=MapViewOfFile(hMapFile,File_Map_All_Access,0,0,0)
else
begin
ShowMessage(′Can not open Mapp File′);
Timer1.Enabled:=false;
end;
end;
//定时从共享内存中读取数据并显示出来
procedure TForm1.Timer1Timer(Sender: TObject);
var
ss: String;
begin
ss:=PChar(MapFilePointer);
Edit1.Text:=ss;
end;
当然最后我们要释放共享内存句柄
UnMapViewOfFile(MapFilePointer);
CloseHandle(hMapFile);
(西安 hszj)
Windows XP Mode深度解析:Win7时代的无缝兼容技术 虚拟机是基础抽象层,而运行时兼容环境(Runtime Compatibility Environment)才是解决遗留系统迁移难题的核心范式。其原理在于通过增强会话协议、双向设备重定向与应用级集成三重机制,在宿主系统中实现 guest 应用的原生级交互体验。这类技术不仅承载着兼容性保障的关键价值,更深刻影响了现代操作系统如WSL、Android子系统等的设计逻辑。典型应用场景包括VB6/Access架构的老财务软件、工业控制驱动、医疗影像设备接口等无法重构的legacy application。本文聚焦Wi 阅读详情

相关推荐

ATI X1300显卡Windows 7 32位专用驱动安装指南

ATI X1300是ATI公司(现为AMD的一部分)在2006年推出的一款面向入门级市场的图形处理器(GPU),隶属于Radeon系列。它以较高的性价比,迅速占领了市场,尤其是在追求经济实惠的消费者当中十分受欢迎。驱动程序(Driver)是一种特殊的软件,其主要职责是允许操作系统和硬件设备之间进行通信。它相当于硬件与操作系统之间的翻译官,将来自操作系统的指令转换成硬件能够理解的格式,同时将硬件的状态和数据反馈给操作系统。

weixin_42174098的博客 1092

Windows应用程序~~窗体间跳转、窗体间的数据传递

一. 窗体间的跳转 1. 第一种打开窗体,原本窗体保留在窗口 创建两个窗体 登录成功后我们调转到QQ主界面,在登录时编写调转代码 new出来我们要跳转的窗体, 通过Show()显示窗体 登录成功后显示第二个窗体。 2. 第二种打开后关闭登录窗口 this.Hide(); //通过方法隐藏窗体 this.Visible=false; //通过属性隐藏窗体 登录成功后,只会QQ主界面,登录界面自动隐藏 3. 关闭窗体后,如果在运行会报错,程序未关闭 如何解决呢? 因为我们的程序在

自学之路←_← 4074

易语言离线OCR模块:Win7/Win10无网部署实战

OCR(光学字符识别)是将图像中文字转换为可编辑文本的基础AI技术,其核心原理依赖于文本检测与序列识别双阶段深度学习模型。在工业级落地中,技术价值不仅在于高精度,更在于低依赖、强兼容与零运维——尤其面向无网络、无管理员权限、缺乏运行库的老旧Windows环境。PaddleOCR等现代OCR框架虽精度领先,但原生Python部署难以适配易语言生态;而本方案通过C++重写推理引擎、INT8量化压缩、资源内嵌DLL等关键技术,实现真正开箱即用的离线OCR能力。典型应用场景包括财务票据自动录入、合同关键信息提取、手

weixin_34242331的博客 387

windows下进程间通信的

windows下进程间通信的 2010年09月04日   [b]windows下进程间通信的手段有哪些?[/b][b] [/b][b]收藏 [/b]   摘 要 随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求。编写多进程/多线程程序成为现代程序设计的一个重要特点,在多进程程序设计中,进程间的通信是不可避免的。Microsoft Win32 API提供了多种进...

rl784rl 507

MuJoCo 机械臂关节空间阻抗控制Impedance实现(附代码)

阻抗控制通过调整关节的刚度和阻尼,让机器人在接触时产生顺应性,减少冲击力,其核心目标是在接触外部载荷时能够自适应调整输出力矩,实现力与位置的协同控制。阻抗控制可以很快的到达设定位置,在此基础上,使用mujoco交互中的施加外力操作,可以看到当外力松开后,机械臂也可以很快的回弹回设定位置。其中self.Kp和self.Kd为固定刚度和阻尼系数,通过修改刚度和阻尼参数,可以变得更柔顺来应对各种场景。注释掉该行后,直接simulate仿真可以看到机械臂控制位置震荡等情况,接下来引入关节空间阻抗控制的代码。

darcsdn 1276

【实验】Linux下完全卸载oracle单实例(亲身体验完整版)

停止oracle数据库服务 停止监听 卸载数据库实例 因为自己懒得再弄dbca图形化界面啥的,直接采用dbca静默删除数据库实例,命令如下 dbca -silent -deleteDatabase -sourcedb orclhq -sid orcl -sysDBAUserName orcl -sysDBAPassword zte [oracle@slave ~]$ dbca -silent ...

萝卜吃鱼914的博客 1945

应用系统之间数据传递的几种方式

本文转载自sina_blog(siangzhang) 随着近年来SOA(面向服务技术架构)的兴起,越来越多的应用系统开始进行分布式的设计和部署。 系统由原来单一的技术架构变成面向服务的多系统架构。 原来在一个系统之间可以完成的业务流程,通过多系统的之间多次交互来实现。 这里不打算介绍如何进行SOA架构的设计,而是介绍一下应用系统之间如何进行数据的传输。 应用系统之间数据传输有三个要素

nylic的博客 3万+

西门子S7-1200与汇川SV660F伺服Profinet通讯调试实战

在工业自动化领域,Profinet作为工业以太网标准协议,凭借其高实时性和灵活组网能力,已成为伺服驱动器与PLC通讯的主流选择。其核心原理是通过设备名识别、IP分配以及标准报文(如111速度报文、105定位报文)传输控制字与状态字,实现驱动器的精准控制。相比传统脉冲或CANOpen方案,Profinet直连省去了协议转换网关,降低了成本与故障点,尤其适用于绕线设备、包装机械等中小型单轴或多轴运动控制系统。本文以西门子S7-1200 PLC搭配汇川SV660F伺服为例,完整梳理了从GSDMD组态、InoDri

weixin_29184371的博客 233

STL容器底层原理与复杂度:C++/Qt面试高频考点详解

数据结构与算法复杂度是C++开发工程师绕不开的基础功底。STL容器作为标准库最常用的组件,其底层原理直接决定内存布局、操作效率与代码可靠性。理解vector连续存储与扩容均摊、红黑树保持有序查找、哈希表处理冲突与rehash,是进行容器选型的关键,也决定了在数据规模上升时程序能否保持稳定性能。在Qt跨平台项目中,STL容器与QList、QHash等原生容器混合使用场景非常常见,弄清楚二者差异以及迭代器失效规则,能有效避免隐蔽Bug。无论是面对C++岗位面试追问复杂度细节,还是在日志统计、协议解析等真实业务中

cuiji1279的博客 173

华南理工大学电子与信息学院23年预推免复试面试经验贴

华南理工大学电子与信息学院23年预推免复试面试经验贴

Scut_Ty的博客 3299

MMWCAS-DSP-EVM与AWR2243实战:从开箱到数据采集的完整避坑指南

本文提供了MMWCAS-DSP-EVM与AWR2243毫米波雷达评估板从开箱、软硬件准备、固件烧录到数据采集的完整实战指南。重点解析了硬件连接、软件版本匹配、固件烧录、网络配置及MMWave Studio GUI操作等关键步骤,并汇总了常见问题排查方法,帮助开发者快速上手并规避常见陷阱。

algae的博客 504

Win9x下程序间的数据传递 (转)

Win9x下程序间的数据传递 (转)[@more@]WIN9X下程序间的数据传递   大家知道在Window 9x中一个应用程序不能直接访问另一个程序的内存地址,因为WIN9x为每个运行中的进程提供了自己的虚拟空间,这...

csd3176的博客 65

夸克缓存视频合并小工具

原理 使用windows的命令行的copy命令来合并 copy /b 0+1+2+3 new.ts 分析缓存目录结构,发现都是一个m3u8文件带一个同名文件夹 所以分析m3u8并把原来的路径换成这个缓存文件夹路径并按顺序合并即可。 其中碰到的难点是Qprocess在windows不好使,索性直接存成.bat批处理文件再执行 还有就是中文问题,具体在代码里都说了。 代码 (环境Qt5.7.0) 这是mainwindow.h #ifndef MAINWINDOW_H #defin.

natural_Caduceus 1万+

Godot游戏开发:从GDScript到C#的字幕系统底层重构与性能优化

在游戏开发中,字幕系统是连接叙事与玩家的关键桥梁,其稳定性和性能直接影响用户体验。从技术原理上看,字幕系统通常涉及文本渲染、资源管理和事件驱动等核心概念。通过采用强类型语言和现代架构设计,可以显著提升系统的健壮性和可维护性,这在大型项目或需要频繁迭代的游戏中尤为重要。例如,利用C#的类型安全特性替代动态类型,能有效减少运行时错误;而事件驱动模型和异步编程则能优化资源加载和显示逻辑,避免阻塞主线程。这些技术优化最终服务于更流畅的剧情呈现和更复杂的交互场景。本文聚焦于Godot引擎中字幕系统的底层重构,详细探讨

ciya3282的博客 296

域适应分类:MCD论文笔记——Maximum Classifier Discrepancy for Unsupervised Domain Adaptation

域适应分类:MCD论文笔记——Maximum Classifier Discrepancy for Unsupervised Domain Adaptation

qq_50001789的博客 1007

PX4从放弃到精通(二十一):使用git管理PX4代码

文章目录前言一、设置git密钥二、将代码上传至gitee 前言 Ubuntu 18.04 PX4 1.11.3 由于github有时网速较慢,本文使用gitee。 一、设置git密钥 ssh-keygen -t rsa -C “your_email@youremail.com” your_email@youremail.com为自己注册的gitee账户邮箱.设置路径与密码时,也直接回车不设置,如下图,密钥生成的位置在红框处. 在密钥目录下按Ctrl+H显示隐藏文件,进入.ssh文件夹用gedit打开id

超维空间科技的博客 3480

win10系统右键新建菜单里office报错0x8007007A:传递给系统调用的数据区域太小。

win10系统右键新建菜单里office报错0x8007007A:传递给系统调用的数据区域太小。 问题描述: 鼠标右键新建word、excel等office文件时,提示错误:0x8007007A:传递给系统调用的数据区域太小。但原有office文件可正常使用(本人电脑是thinkpad,office为预装软件) 主要表现如下: 1、鼠标右键新建word、excel、ppt等office文件的...

qq_33212567的博客 6818

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

PCI9x5x驱动移植支持PCI9054在win7下使用2

在Public.h3L0L1L2LCTL_CODE0x805CTL_CODE0x806。

haohaoganhuo的专栏 1088

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

如何实现win9X进程间数据通讯技术

1、引言  在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。WIN32 API提供了许多函数使我们能够方便高效地进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换,就如同在WIN16中对本地进程进行读写操作一样。  典型的WIN16两进程可以通过共享内存来进行数据交换:(1)进程A将GlobalAlloc(GMEM_SHARE...)API分配一定长度的内存;(

cnviolet的专栏 761

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SoftGPU:Windows 9x虚拟机3D加速的终极解决方案

在当今虚拟化技术蓬勃发展的时代,我们面临着一个有趣的技术挑战:如何在现代虚拟化环境中运行经典Windows 9x系统(Windows 95/98/Me)并享受完整的3D图形加速体验?SoftGPU项目以创新的软件渲染架构和硬件加速驱动,为这一难题提供了高效、完整的解决方案。 ## 核心理念:跨越时代的图形兼容性 SoftGPU的设计哲学源于对历史遗留系统的尊重与现代技术的巧妙结合。项目核心目标

gitblog_00104的博客 699

掌握DOSBox-X调试器:5个核心技巧深度解析DOS程序运行状态

DOSBox-X作为DOSBox项目的重要分支,其强大的内置调试器为DOS程序分析和问题诊断提供了专业级工具。本文将通过5个核心技巧,带你深入掌握DOSBox-X调试器的实战应用,从基础操作到高级调试技巧,全面提升DOS程序调试效率。 ## 调试器配置与启动:构建专业调试环境 要启用DOSBox-X调试功能,需要在编译时开启调试支持。在配置阶段添加`--enable-debug`参数即可开启基

gitblog_01153的博客 1001
上一篇: VC.Net从DLL传递消息到EXE
下一篇: 用Delphi实现程序间的数据传递
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值