delphi获取Exe文件版本信息的函数

Type

TFileVersionInfo = Record

FixedInfo:TVSFixedFileInfo; {版本信息} 
CompanyName:String; {公司名称} 
FileDescription:String; {说明} 
FileVersion:String; {文件版本} 
InternalName:String; {内部名称} 
LegalCopyright:String; {版权} 
LegalTrademarks:String; {合法商标} 
OriginalFilename:String; {源文件名} 
ProductName:String; {产品名称} 
ProductVersion:String; {产品版本} 
Comments:String; {备注} 
LocalPort:String; {Local UDP_Message Port} 
end; 

Function GetFileVerInfo(ExeFileName :Pchar;var VerSionInfo:TFileVersionInfo):Boolean;
var 
dwHandle, dwVersionSize : DWORD; 
Find : String; 
pcBuffer : PChar; 
pTemp : Pointer; 
FileVersionInfo : TVSFixedFileInfo; 
begin 
Find := '\'; 
dwVersionSize := GetFileVersionInfoSize( PChar(ExeFilename),dwHandle ); 
if dwVersionSize = 0 then begin 
Result:=False; 
Exit; 
end; 
GetMem( pcBuffer, dwVersionSize ); 
if not GetFileVersionInfo( PChar(ExeFilename),dwHandle,dwVersionSize,pcBuffer ) then begin 
FreeMem(pcBuffer); 
Result:=False; 
Exit; 
end; 
if not VerQueryValue( pcBuffer,PChar(Find),pTemp,dwVersionSize ) then begin 
FreeMem(pcBuffer); 
Result:=False; 
Exit; 
end; 
FileVersionInfo:=PVSFixedFileInfo(pTemp)^; 
With FileVersionInfo do begin 
VersionInfo.FixedInfo.dwSignature:=dwSignature; 
VersionInfo.FixedInfo.dwStrucVersion:=dwStrucVersion; 
VersionInfo.FixedInfo.dwFileVersionMS:=dwFileVersionMS; 
VersionInfo.FixedInfo.dwFileVersionLS:=dwFileVersionLS; 
VersionInfo.FixedInfo.dwProductVersionMS:=dwProductVersionMS; 
VersionInfo.FixedInfo.dwProductVersionLS:=dwProductVersionLS; 
VersionInfo.FixedInfo.dwFileFlagsMask:=FileVersionInfo.dwFileFlagsMask; 
VersionInfo.FixedInfo.dwFileFlags:=fileVersionInfo.dwFileFlags; 
VersionInfo.FixedInfo.dwFileOS:=FileVersionInfo.dwFileOS; 
VersionInfo.FixedInfo.dwFileType:=FileVersionInfo.dwFileType; 
VersionInfo.FixedInfo.dwFileSubtype:=FileVersionInfo.dwFileSubtype; 
VersionInfo.FixedInfo.dwFileDateMS:=FileVersionInfo.dwFileDateMS; 
VersionInfo.FixedInfo.dwFileDateLS:=FileVersionInfo.dwFileDateLS; 
end; 
Find := '\StringFileInfo\080403A8\'; 
if VerQueryValue( pcBuffer,PChar(Find+'CompanyName'),pTemp,dwVersionSize ) then 
VersionInfo.CompanyName:=PChar(pTemp) 
else begin 
Find := '\StringFileInfo\040904E4\'; 
if VerQueryValue( pcBuffer,PChar(Find+'CompanyName'),pTemp,dwVersionSize ) then 
VersionInfo.CompanyName:=PChar(pTemp) 
else begin 
Result:=False; 
Exit; 
end; 
end; 
if VerQueryValue( pcBuffer,PChar(Find+'FileDescription'),pTemp,dwVersionSize ) then 
VersionInfo.FileDescription:=PChar(pTemp); 

if VerQueryValue( pcBuffer,PChar(Find+'FileVersion'),pTemp,dwVersionSize ) then 
VersionInfo.FileVersion:=PChar(pTemp); 

if VerQueryValue( pcBuffer,PChar(Find+'InternalName'),pTemp,dwVersionSize ) then 
VersionInfo.InternalName:=PChar(pTemp); 

if VerQueryValue( pcBuffer,PChar(Find+'LegalCopyright'),pTemp,dwVersionSize ) then 
VersionInfo.LegalCopyright:=PChar(pTemp); 

if VerQueryValue( pcBuffer,PChar(Find+'LegalTrademarks'),pTemp,dwVersionSize ) then 
VersionInfo.LegalTrademarks:=PChar(pTemp); 

if VerQueryValue( pcBuffer,PChar(Find+'OriginalFilename'),pTemp,dwVersionSize ) then 
VersionInfo.OriginalFilename:=PChar(pTemp); 

if VerQueryValue( pcBuffer,PChar(Find+'ProductName'),pTemp,dwVersionSize ) then 
VersionInfo.ProductName:=PChar(pTemp); 

if VerQueryValue( pcBuffer,PChar(Find+'ProductVersion'),pTemp,dwVersionSize ) then 
VersionInfo.ProductVersion:=PChar(pTemp); 

if VerQueryValue( pcBuffer,PChar(Find+'Comments'),pTemp,dwVersionSize ) then 
VersionInfo.Comments:=PChar(pTemp); 
if VerQueryValue( pcBuffer,PChar(Find+'LocalPort'),pTemp,dwVersionSize ) then 
VersionInfo.LocalPort:=PChar(pTemp) 
else 
VersionInfo.LocalPort:='66500'; 
FreeMem(pcBuffer ); 
Result:=True; 
end;

Delphi获取其他exe程序版本号的更多相关文章

  1. Delphi获取指定文件的版本号

    获取指定文件的版本号 方式一: function GetFileVersion(FileName: string): string; type PVerInfo = ^TVS_FIXEDFILEINF ...

  2. Delphi 中将一些 Dll等生成资源文件打包成一个独立的EXE程序方法步骤

    资源文件一般为扩展名为res的文件,其自带的资源编译工具BRCC32.EXE(位于/Delphi/BIN目录下) 1.编写rc脚本文本 用记事本或其它文本编辑器编写一个扩展名为rc的文件,格式分别为在 ...

  3. Python 获得程序 exe 的版本号

    Python 获得程序 exe 的版本号 python中需要安装 pywin32 包 # based on http://stackoverflow.com/questions/580924/pyth ...

  4. Delphi获取文件名、文件名不带扩展名、文件名的方法;delphi 获取文件所在路径

    取文件名 ExtractFileName(FileName); 取文件扩展名: ExtractFileExt(filename); 取文件名,不带扩展名: 方法一:   Function Extrac ...

  5. java实现可安装的exe程序

    java实现可安装的exe程序 通过编写Java代码,实现可安装的exe文件的一般思路: 1.在eclipse中创建java项目,然后编写Java代码,将编写好的Java项目导出一个.jar格式的ja ...

  6. C#、ASP.NET获取当前应用程序的绝对路径,获取程序工作路径 (转帖)

    C#.ASP.NET获取当前应用程序的绝对路径,获取程序工作路径   ============================================ 使用 Application.Start ...

  7. Qt界面中嵌入其他exe程序的界面,使用Qt5

    下面用一个小例子来演示如何在Qt的界面中嵌入其他exe程序的界面,最终效果如下图所示.本文参考了 http://blog.csdn.net/jiaoyaziyang/article/details/4 ...

  8. WPF 程序中启动和关闭外部.exe程序

    当需要在WPF程序启动时,启动另一外部程序(.exe程序)时,可以按照下面的例子来: C#后台代码如下: using System; using System.Collections.Generic; ...

  9. [转]Delphi中,让程序只运行一次的方法

    program onlyRunOne; uses Forms,Windows,SysUtils, Dialogs, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} v ...

随机推荐

  1. A* 寻路学习

    启发式搜索:启发式搜索就是在状态空间中的搜索.对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标.这样可以省略大量无谓的搜索路径,提高了效率.在启发式搜索中,对位置的估价是十分重 ...

  2. ASP.NET WebApi使用Swagger生成api说明文档

    最近做的项目使用mvc+webapi(非.Net Core),采取前后端分离的方式,后台提供API接口给前端开发人员.这个过程中遇到一个问题后台开发人员怎么提供接口说明文档给前端开发人员,最初打算使用 ...

  3. Revit API 判断一个构件在某个视图中的可见性

    查看 Revit API.发现有Element::IsHidden这个方法.通过UI创建一个element,注意要使得这个element在某些视图可见,但是在另一些视图不可见.运行下面的方法,你会发现 ...

  4. taro 微信小程序原生作用域获取

    在 Taro 的页面和组件类中,this 指向的是 Taro页面或组件实例. 但是一般我们需要获取 Taro的页面和组件 所对应的 小程序原生页面和组件实例,这个时候我们可以通过 this.$scop ...

  5. ElasticSearch(六)底层索引控制

    相似度算法 涉及到了ES的底层,首先讲一下ES的底层核心,相似度模型,ES的查询和传统的数据库查询最大的差别就在相似度查询(之前讲过,索引存储的最大差别就是讲非结构化数据转化为结构化),ES里面会给文 ...

  6. VS2010生成安装包制作步骤 (转)

    阅读目录 VS2010生成安装包制作步骤 回到目录 VS2010生成安装包制作步骤   在VS2010中文旗舰版本中生成winForm安装包,可以复制你电脑中的开发环境,避免你忘记了一下配置然后在别的 ...

  7. 开源截图工具cutycapt的安装及使用

    之前在安装过程中碰到很多问题,也找了不少资料.现总结了下,给有需要的朋友.centos下安装cutycapt比较麻烦,需要先安装qt47,再下载cutycapt源码编译;而在ubuntu下安装cuty ...

  8. SPI 核的寄存器空间

    SPI 核的寄存器空间 寄存器的地址与定义: 寄存器描述与配置: 复位寄存器: 控制寄存器: 状态寄存器: 数据发送寄存器: 在使用DTR之前,一定要经过复位处理. 对于DTR的操作中,首先写入com ...

  9. [转]windows环境下使用virtualenv对python进行多版本隔离

    windows环境下使用virtualenv对python进行多版本隔离 最近在用python做一个文本的情感分析的项目,用到tensorflow,需要用python3的版本,之前因为<机器学习 ...

  10. BugFree使用技巧 转载

    转载 2013年05月27日 17:53:45 BugFree使用技巧 我们将会从使用Ldap域账号.使用标记.发送邮件通知.更改上传附件的大小和使用快捷键来进行讲解. 使用Ldap域帐号 如果希望使 ...