DELPHI编译软件时带上当前IDE的版本号

如果通过 CompilerVersion 得到的也只是编译器的版本号。

比如:delphi XE12 是 36 ,也仅此而己。

我想得到的是IDE的版本号,比如当前最新版本的DELPHI是:Embarcadero® RAD Studio 12 Version 29.0.53571.9782 

我想得到 29.0.53571.9782  这个版本号;

IDE提供的API中,好象没有与之相关的东西;想要得到这个版本号,也许只能用变通的方式。

于是用DELPHI2007编译以下的代码

program GetIDEVER;//{.$APPTYPE CONSOLE}//{$R *.res}usesWindows,SysUtils,Classes;function GetFileVersion(const FileName: string): string;
varn, Len: DWORD;Buf: PChar;Value: Pointer;szName: array[0..255] of Char;Transstring: string;
beginLen := GetFileVersionInfoSize(PChar(FileName), n);if Len > 0 then beginBuf := AllocMem(Len);if GetFileVersionInfo(Pchar(FileName), n, Len, Buf) then beginValue := nil;VerQueryValue(Buf, '\VarFileInfo\Translation', Value, Len);if Value <> nil thenTransstring := IntToHex(MakeLong(HiWord(LongInt(Value^)), LoWord(LongInt(Value^))), 8);StrPCopy(szName, '\stringFileInfo\' + Transstring + '\FileVersion');if VerQueryValue(Buf, szName, Value, Len) thenResult := StrPas(Pchar(Value));end;FreeMem(Buf, n);end;end;varfn1, fn2 ,s: string;L: TStringList;begintry{ TODO -oUser -cConsole Main : Insert code here }
//    fn1 := ChangeFileExt(ParamStr(0), '.ini');fn1 := ParamStr(1);if FileExists(fn1) then beginfn2 := ParamStr(2);L := TStringList.Create;trys := GetFileVersion(fn1);L.Text := 'const IDE_VER=''' + s+''';';L.SaveToFile(ExtractFilePath(ParamStr(0)) + fn2);finallyFreeAndNil(L)end;end;excepton E: Exception doWriteln(E.ClassName, ': ', E.Message);end;
end.

即可得到一个大小为 90K左右的控制台程序 GetIDEVER.exe(这就是为什么用D2007编译的原因,目前我的电脑最低是2007,用最新的DXE12,编译出来得有4.5MB左右)

然后使用CnPack提供的脚本功能;带参数执行这个 GetIDEVER.exe 即可

如:

program PGetIDEVER;usesWindows, Messages, SysUtils, Classes,  Controls;varBDSPath: string;
beginBDSPath := GetIdeRootDirectory+'bin\bds.exe';WinExecute('GetIDEVER.exe "'+BDSPath+'" "IDEVER.inc" ', 0);
end.

这样就会得到一个 IDEVER.inc

此时,只需要在你的单元文件中导入这个INC即可直接读取了

{$I IDEVER.inc}

然后要显示到主窗体的状态栏中:

Main_SBar.Panels[0].Text := IDE_VER ;

以 DELPHI2007为例:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/431420.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轰!天文学家刚刚目睹了三年来最大的太空爆炸

天文学家目睹了太空中最大的一次爆炸。 被标记为 AT2021lwx 的这次爆炸事件被观测到比任何已知的超新星都要亮十倍&#xff0c;超新星爆炸发生在大质量恒星死亡之时。而且超新星爆炸只持续几个月&#xff0c;而这次爆炸事件已经持续了至少三年。 AT2021lwx 也比恒星被超大质量…

聊一下cookie,session,token的区别

cookie cookie是存放在客户端的,主要用于会话管理和用户数据保存;cookie通过http报文的请求头部分发送给服务器,服务器根据cookie就可以获取到里面携带的session id(用于获取服务器中对应的session数据),因为http是无状态协议,我们通常就是通过cookie去维护状态的 cookie是在…

LabVIEW提高开发效率技巧----使用状态机架构

状态机架构&#xff08;State Machine Architecture&#xff09;是LabVIEW编程中的一种常见且高效的设计模式&#xff0c;特别适合用于处理具有多个操作状态的复杂系统。通过这种架构&#xff0c;程序能够根据不同的输入条件或事件&#xff0c;在多个状态之间切换&#xff0c;从…

守护您的数字世界:IObit Malware Fighter 11 PRO,您的全能电脑卫士

在这个数字化时代&#xff0c;我们的电脑和个人数据面临着前所未有的威胁。病毒、恶意软件、黑客攻击&#xff0c;这些词汇听起来或许遥远&#xff0c;但它们无时无刻不在威胁着我们的网络安全。幸运的是&#xff0c;IObit Malware Fighter 11 PRO&#xff0c;这款屡获殊荣的杀…

【Python】数据可视化之点线图

目录 散点图 气泡图 时序图 关系图 散点图 Scatterplot&#xff08;散点图&#xff09;是一种用于展示两个变量之间关系的图表类型。在散点图中&#xff0c;每个观测值&#xff08;或数据点&#xff09;都被表示为一个点&#xff0c;其中横轴&#xff08;X轴&#xff09;代…

php发送邮箱教程:如何实现邮件发送功能?

php发送邮箱性能优化策略&#xff1f;怎么使用PHPMail发送邮箱&#xff1f; 无论是用户注册验证、密码重置&#xff0c;还是系统通知&#xff0c;邮件发送都是不可或缺的一部分。AokSend将详细介绍如何使用PHP实现邮件发送功能&#xff0c;帮助开发者快速掌握这一技能。 php发…

CSS 实现文本溢出省略号显示,含单行与多行文本溢出

&#x1f680; 个人简介&#xff1a;某大型国企资深软件研发工程师&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码喽的自我修养&#x1f9…

【干货来了】PLC多种通讯方式汇总学习~

PLC的通讯功能是其连接设备、控制系统和外部系统的重要组成部分。PLC支持多种通讯方式&#xff0c;本文将讲述PLC常见的通讯方式及其优缺点&#xff0c;别再傻傻分不清楚~ 一.点对点通讯&#xff08;P2P&#xff09; 点对点通讯是一种简单的通讯方式&#xff0c;它直接将两个…

【Docker】Docker快速入门

Docker学习笔记 一、Docker概述 为什么会出现Docker? 安卓开发流程&#xff1a;apk(java开发的)发布到应用商店&#xff0c;用户安装apk即可使用。 后端开发流程&#xff1a; jar(java开发的)带上环境发布到Docker仓库&#xff0c;用户从Docker仓库拉取镜像并部署。 总结…

OpenAI o1团队突破性论文:『过程推理』中数学推理能力大幅提升,从正确中学习的新方法

原创 超 近年来&#xff0c;大型语言模型(LLMs)在复杂的多步推理任务中取得了令人瞩目的进展。这些模型能够生成逐步的思维链&#xff0c;解决从小学数学到高等微积分的各种问题。然而&#xff0c;即使是最先进的模型也常常陷入逻辑陷阱&#xff0c;产生看似合理但实际错误的推…

统信服务器操作系统【刻录镜像制作U盘启动盘的工具】

统信服务器操作系统各版本上刻录镜像制作U盘启动盘的工具方案 文章目录 应用场景一、问题现象二、问题分析解决方案应用场景 硬件/整机信息:全平台 CPU架构:全架构 OS版本信息:服务器a版,e版,d版(其中d版遇到的刻录类问题较少) 软件信息:dd工具、Fedora Media Writer工…

【Linux实践】实验三:LINUX系统的文件操作命令

【Linux实践】实验三&#xff1a;LINUX系统的文件操作命令 实验目的实验内容实验步骤及结果1. 切换和查看目录2. 显示目录下的文件3. 创建和删除目录① mkdir② rm③ rmdir 4. 输出和重定向① 输出② 重定向 > 和 >> 5. 查看文件内容① cat② head 6. 权限7. 复制8. 排…

Gnu Radio抓取WiFi信号,流程图中模块功能

模块流程如图所示&#xff1a; GNURadio中抓取WiFi信号的流程图中各个模块的功能&#xff1a; UHD: USRP Source&#xff1a; 使用此模块配置USRP硬件进行信号采集。设置频率、增益、采样率等参数。Complex to Mag^2&#xff1a; 将复数IQ数据转换为幅度的平方。Delay&#xf…

【计网】从零开始掌握序列化 --- 实现网络计算器项目

​​​请各位保持头脑清醒&#xff0c; ​​​读些好书&#xff0c;做点有用的事&#xff0c; ​​​快快乐乐地生活。 ​​​ --- 斯蒂芬金 《肖申克的救赎》--- 从零开始掌握序列化 1 知识回顾2 服务器框架3 客户端框架4 运行测试 1 知识回顾 前面两篇文章学习中基础知识…

微服务学习笔记之Docker

目录 认识Docker 安装Docker 安装yum工具 配置Docker的yum源 更新yum&#xff0c;建立缓存 安装Docker 启动并校验 配置镜像加速 Docker常见命令 命令 演示 给命令起别名 Docker数据卷 认识数据卷 数据卷常见命令 nginx的html目录挂载演示 数据卷挂载本地目录或…

Redis: 特点,优势,与其他产品的区别以及高并发原理

入门Redis概述 1 &#xff09;选择Redis是因为其高性能 因为 Redis 它数据存储的机制是存在内存中的&#xff0c;减少了传统关系数据库的磁盘IO它是单线程的保证了原子性&#xff0c;它还提供了事务&#xff0c;锁等相关的机制 2 &#xff09;Redis 环境安装配置 linux 或 d…

企业网盘能作为FTP替代产品吗?

在数字化办公日益普及的今天&#xff0c;企业对于文件存储、传输和协作的需求不断增长。传统的FTP协议虽然在文件传输领域有着不可替代的地位&#xff0c;但其在用户体验、安全性、协作功能等方面逐渐显得力不从心。企业网盘作为一种新兴的数据管理解决方案&#xff0c;正逐渐成…

LeetCode234. 回文链表(2024秋季每日一题 26)

给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;hea…

建立分支提交代码

git分支 git branch 产看当前分支 git branch -a 查看所有分支 git checkout 分支名 切换分支 git checkout -b 分支名 建立分支&#xff08;仅仅是在本地建立了&#xff0c;并没有关联线上&#xff09; git push --set-upstream origin 分支名 把本地分支推到先线上 gti add …

【计算机视觉】YoloV8-训练与测试教程

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;他强任他强&#xff0c;清风拂山冈&#xff01; &#x1f4ab; 欢迎来到我的学习笔记&#xff01; 制作数据集 Labelme 数据集 数据集选用自己标注的&#xff0c;可参考以下&#xff1a…