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. The dis/advantage of forward declaration

    In our projects, in C++ head file, if reference to some classes (reference or pointer), instead of i ...

  2. IT痴汉的工作现状11-程序猿的烦恼

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/lincyang/article/details/25535181         痴汉们事实上是非常 ...

  3. Python __slots__的使用

    每个类在实例化时都会被分配一个dict,通过 实例.__dict__来访问,dict记录了实例的所有属性 如: class Man(object): pass man = Man()print(man ...

  4. [转]一个故事讲清楚NIO

    假设某银行只有10个职员.该银行的业务流程分为以下4个步骤: 1) 顾客填申请表(5分钟): 2) 职员审核(1分钟): 3) 职员叫保安去金库取钱(3分钟): 4) 职员打印票据,并将钱和票据返回给 ...

  5. style-loader、css-loader、mini-css-extract-plugin 区别

    项目 区别 css-loader 处理 css 文件 style-loader 把 js 中 import 导入的样式文件代码,打包到 js 文件中,运行 js 文件时,将样式自动插入到<sty ...

  6. 共用体union

    union共用体名 { 类型名 成员名1: 类型名 成员名2: …… 类型名 成员名n; } 由于各个成员变量在内存中都使用同一段存储空间,因此共用体变量的长度等于最长的成员长度,共用体的访问方式和结 ...

  7. C# ASCII与字符串间相互转换 (转)

    引言: 最近开始学习C#,在写串口助手小工具时遇到十六进制发送与字符发送之间转换的问题, 小弟通过网络各路大神的帮助下,终于实现正确显示收发,小弟菜鸟一枚,不足之处还望各位批评指正O(∩_∩)O! 其 ...

  8. bzoj 4184 shallot——线段树分治+线性基

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4184 本来想了可持久化trie,不过空间是 nlogn (出一个节点的时候把 tot 复原就 ...

  9. npm是什么

    npm简介 维基百科中npm定义 npm完全用JavaScript写成,最初由艾萨克·施吕特(Isaac Z. Schlueter)开发. 艾萨克表示自己意识到"模块管理很糟糕"的 ...

  10. WebGL和ThreeJs学习6--射线法确定3D空间中所选物体

    一.在 threejs 中如何确定下图3D空间中鼠标点击位置的 object 对象? 二.射线法确定步骤及代码 //Three.js提供一个射线类Raycaster来拾取场景里面的物体.更方便的使用鼠 ...