社区
Delphi
帖子详情
如何获取文件的版本信息?
dregs
2002-02-16 11:28:20
如何获取文件的版本信息?
...全文
87
4
打赏
收藏
如何获取文件的版本信息?
如何获取文件的版本信息?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tg123
2002-02-16
打赏
举报
回复
GetFileVersionInfo
torble
2002-02-16
打赏
举报
回复
type
TFileInfo = packed record
CommpanyName: string;
FileDescription: string;
FileVersion: string;
InternalName: string;
LegalCopyright: string;
LegalTrademarks: string;
OriginalFileName: string;
ProductName: string;
ProductVersion: string;
Comments: string;
VsFixedFileInfo:VS_FIXEDFILEINFO;
UserDefineValue:string;
end;
///UserDefine就是用户自定义的了,返回值保存在Info.UserDefineValue中
function GetFileVersionInfomation(const FileName: string; var info: TFileInfo;UserDefine:string=''):
boolean;
const
SFInfo= '\StringFileInfo\';
var
VersionInfo: Pointer;
InfoSize: DWORD;
InfoPointer: Pointer;
Translation: Pointer;
VersionValue: string;
unused: DWORD;
begin
unused := 0;
Result := False;
InfoSize := GetFileVersionInfoSize(pchar(FileName), unused);
if InfoSize > 0 then
begin
GetMem(VersionInfo, InfoSize);
Result := GetFileVersionInfo(pchar(FileName), 0, InfoSize, VersionInfo);
if Result then
begin
VerQueryValue(VersionInfo, '\VarFileInfo\Translation', Translation, InfoSize);
VersionValue := SFInfo + IntToHex(LoWord(Longint(Translation^)), 4) +
IntToHex(HiWord(Longint(Translation^)), 4) + '\';
VerQueryValue(VersionInfo, pchar(VersionValue + 'CompanyName'), InfoPointer, InfoSize);
info.CommpanyName := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'FileDescription'), InfoPointer, InfoSize);
info.FileDescription := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'FileVersion'), InfoPointer, InfoSize);
info.FileVersion := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'InternalName'), InfoPointer, InfoSize);
info.InternalName := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'LegalCopyright'), InfoPointer, InfoSize);
info.LegalCopyright := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'LegalTrademarks'), InfoPointer, InfoSize);
info.LegalTrademarks := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'OriginalFileName'), InfoPointer, InfoSize);
info.OriginalFileName := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'ProductName'), InfoPointer, InfoSize);
info.ProductName := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'ProductVersion'), InfoPointer, InfoSize);
info.ProductVersion := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'Comments'), InfoPointer, InfoSize);
info.Comments := string(pchar(InfoPointer));
if VerQueryValue(VersionInfo, '\', InfoPointer, InfoSize) then
info.VsFixedFileInfo := TVSFixedFileInfo(InfoPointer^);
if UserDefine<>'' then
begin
if VerQueryValue(VersionInfo,pchar(VersionValue+UserDefine),InfoPointer,InfoSize) then
info.UserDefineValue:=string(pchar(InfoPointer));
end;
end;
FreeMem(VersionInfo);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
info: TFileInfo;
begin
if OpenDialog1.Execute then
begin
if GetFileVersionInfomation(opendialog1.FileName, info,'WOW Version') then
////我必须知道'WOW Version'才能知道有这么一个自定义的串。如果用户定义的是'abc'我就没有办法取得了。
////而资源管理器的版本信息中就不一定需要知道。它可以找出所有的版本信息。
begin
Listbox1.Items.Add(OpenDialog1.FileName);
ListBox1.Items.Add('Comments:' + info.Comments);
ListBox1.Items.Add('CommpanyName:' + info.CommpanyName);
ListBox1.Items.Add('FileDescription:' + info.FileDescription);
ListBox1.Items.Add('FileVersion:' + info.FileVersion);
ListBox1.Items.Add('InternalName:' + info.InternalName);
ListBox1.Items.Add('LegalCopyright:' + info.LegalCopyright);
ListBox1.Items.Add('LegalTrademarks:' + info.LegalTrademarks);
ListBox1.Items.Add('OriginalFileName:' + info.OriginalFileName);
ListBox1.Items.Add('ProductName:' + info.ProductName);
ListBox1.Items.Add('ProductVersion:' + info.ProductVersion);
ListBox1.Items.Add('UserDefineValue:' + info.UserDefineValue);
if boolean(info.VsFixedFileInfo.dwFileFlags and vs_FF_Debug) then
listbox1.Items.Add('Debug:True')
else
ListBox1.Items.Add('Debug:False');
ListBox1.Items.Add('');
end;
end;
end;
实际上就是实现资源管理其的文件属性--〉版本 中的功能。
实际上就是枚举文件的所有的用户自定义的版本信息字符串。
dregs2002
2002-02-16
打赏
举报
回复
使用TVerInfoRes类;封装了三个函数:1.GetFileVersionInfoSize;
2.GetFileVersionInfo;
3.VerQueryValue;
redlegend_126_com
2002-02-16
打赏
举报
回复
用一下这几个函数,就可以搞定了!
Getfileversioninfosize()
getfileversioninfo()
verqueryvalue()
第五人格
获取
服务器信息失败,第五人格
获取
版本信息
失败怎么办
获取
版本信息
失败解决办法[图]...
第五人格
获取
版本信息
失败怎么办?有很多玩家遇到了这个问题,主要是游戏需要进行更新检查,
获取
失败就不能保证当前的游戏版本是最新的,就不能进入游戏,下面小编带来了解决办法!
获取
版本信息
失败解决办法:1、...
一行命令
获取
文件
版本信息
你还在为
获取
文件
版本信息
而烦恼吗,这篇帖子彻底解决你的问题。
接收到的CAD图纸如何查看其
版本信息
?
我们为什么要查看CAD图纸的绘制
版本信息
呢? 因为CAD图纸的绘制版本决定了能打开其图纸的低版本。什么意思呢,举个例子来说,一张CAD图,可以用2011版的打开,但是2007打不开,就说明该图纸的绘制软件版本高于2007版...
C++
文件
操作——
获取
可执行
文件
或DLL
版本信息
有时我们需要
获取
可执行
文件
或DLL
文件
的
版本信息
,用于比对工具版本是否需要更新,那么如何
获取
文件
的
版本信息
呢? 如下是一种
版本信息
的
获取
方法,可供参考 #pragma comment(lib,"version.lib") #include #...
获取
.apk
文件
版本号、包名等信息
在日常开发版本迭代时,难免会出现一些情况,需要
获取
.apk
文件
的信息。 如: 在安装新版本的apk
文件
时,提示:系统已存在较高版本,此安装包无法安装。 但是核对版本好发现当前版本好比已安装的版本号要大。 出现...
Delphi
5,386
社区成员
262,729
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章