api获取一个程序的描述信息 假如:360安全卫士;右键--属性--文件类型:应用程序。描述:360安全卫士 (想获得此处的信息。)谢谢~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用一个什么version xxx info 什么的API,具体忘了。 const InfoNum = 9; InfoStr: array[1..InfoNum] of string = ( 'ProductName', 'ProductVersion', 'FileDescription', 'LegalCopyright', 'FileVersion', 'CompanyName', 'LegalTradeMarks', 'InternalName', 'OriginalFileName' );var S: string; BufSize, Len: DWORD; Buf: PChar; Value: PChar;begin S := Application.ExeName; BufSize := GetFileVersionInfoSize(PChar(S), BufSize); if BufSize > 0 then begin Buf := AllocMem(BufSize); GetFileVersionInfo(PChar(S), 0, BufSize, Buf); if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[1]), Pointer(Value), Len) then ProductName := Value; if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[2]), Pointer(Value), Len) then ProductVersion := '产品版本: ' + Value; if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[3]), Pointer(Value), Len) then FileDescription := '文件说明: ' + Value; {你想要的文件说明} if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[4]), Pointer(Value), Len) then LegalCopyright := '合法版权: ' + Value; if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[5]), Pointer(Value), Len) then FileVersion := '文件版本: ' + Value; if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[6]), Pointer(Value), Len) then CompanyName := '公司名称: ' + Value; if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[7]), Pointer(Value), Len) then LegalTrades := '合法商标: ' + Value; if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[8]), Pointer(Value), Len) then InternalName := '内部名称: ' + Value; if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[9]), Pointer(Value), Len) then OriginalFilename := '原文件名: ' + Value; FreeMem(Buf, BufSize); end;end; 楼上的那个函数貌似只能获取Translation为080403A8也就是版本语言为简体中文程序的版本信息,如果是其它的Translation就无能为力了吧。我这里有一个函数,不是简体中文的也能获取,希望对你有用。type TFileInfo = packed record//软件版本等信息 CommpanyName: string; //公司 FileDescription: string; //文件描述 FileVersion: string; //文件版本 InternalName: string; //内部名称 LegalCopyright: string; //版权 LegalTrades: string; //合法商标 OriginalFileName: string; //原文件名 ProductName: string; //产品名称 ProductVersion: string; //产品版本 Comments: string; //注释 VsFixedFileInfo: VS_FIXEDFILEINFO;// UserDefineValue: string; //用户自定义值,不用管它 end;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(Integer(Translation^)), 4) + IntToHex(HiWord(Integer(Translation^)), 4) + '\'; VerQueryValue(VersionInfo, PChar(VersionValue + 'CompanyName'), InfoPointer, InfoSize); info.CommpanyName := PChar(InfoPointer); VerQueryValue(VersionInfo, PChar(VersionValue + 'FileDescription'), InfoPointer, InfoSize); info.FileDescription := PChar(InfoPointer); VerQueryValue(VersionInfo, PChar(VersionValue + 'FileVersion'), InfoPointer, InfoSize); info.FileVersion := PChar(InfoPointer); VerQueryValue(VersionInfo, PChar(VersionValue + 'InternalName'), InfoPointer, InfoSize); info.InternalName := PChar(InfoPointer); VerQueryValue(VersionInfo, PChar(VersionValue + 'LegalCopyright'), InfoPointer, InfoSize); info.LegalCopyright := PChar(InfoPointer); VerQueryValue(VersionInfo, PChar(VersionValue + 'LegalTrades'), InfoPointer, InfoSize); info.LegalTrades := PChar(InfoPointer); VerQueryValue(VersionInfo, PChar(VersionValue + 'OriginalFileName'), InfoPointer, InfoSize); info.OriginalFileName := PChar(InfoPointer); VerQueryValue(VersionInfo, PChar(VersionValue + 'ProductName'), InfoPointer, InfoSize); info.ProductName := PChar(InfoPointer); VerQueryValue(VersionInfo, PChar(VersionValue + 'ProductVersion'), InfoPointer, InfoSize); info.ProductVersion := 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 if VerQueryValue(VersionInfo,PChar(VersionValue+UserDefine),InfoPointer,InfoSize) then info.UserDefineValue := string(PChar(InfoPointer)); end; FreeMem(VersionInfo); end;end; 一个简单窗口监视程序的问题 发布 办公OA管理软件 怎样关闭一个己打开的文件 简单问题 有什么方法能够最快的比较出两个TStrings之间的曲别?? 取日期时间的问题 font.height为什么会是负值呢。 delphi6+ADO+SQL SERVER2000数据库如何打包发布?(急!在线等待!) dll调用的问题 怎样把一外部程序设为当前程序(就是让它得到焦点)。 新手关于delphi程序打包的问题 求xml编辑器
const
InfoNum = 9;
InfoStr: array[1..InfoNum] of string = (
'ProductName',
'ProductVersion',
'FileDescription',
'LegalCopyright',
'FileVersion',
'CompanyName',
'LegalTradeMarks',
'InternalName',
'OriginalFileName'
);
var
S: string;
BufSize, Len: DWORD;
Buf: PChar;
Value: PChar;
begin
S := Application.ExeName;
BufSize := GetFileVersionInfoSize(PChar(S), BufSize);
if BufSize > 0 then begin Buf := AllocMem(BufSize);
GetFileVersionInfo(PChar(S), 0, BufSize, Buf);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[1]), Pointer(Value), Len) then
ProductName := Value;
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[2]), Pointer(Value), Len) then
ProductVersion := '产品版本: ' + Value;
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[3]), Pointer(Value), Len) then
FileDescription := '文件说明: ' + Value; {你想要的文件说明}
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[4]), Pointer(Value), Len) then
LegalCopyright := '合法版权: ' + Value;
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[5]), Pointer(Value), Len) then
FileVersion := '文件版本: ' + Value;
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[6]), Pointer(Value), Len) then
CompanyName := '公司名称: ' + Value;
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[7]), Pointer(Value), Len) then
LegalTrades := '合法商标: ' + Value;
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[8]), Pointer(Value), Len) then
InternalName := '内部名称: ' + Value;
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[9]), Pointer(Value), Len) then
OriginalFilename := '原文件名: ' + Value;
FreeMem(Buf, BufSize);
end;
end;
type
TFileInfo = packed record//软件版本等信息
CommpanyName: string; //公司
FileDescription: string; //文件描述
FileVersion: string; //文件版本
InternalName: string; //内部名称
LegalCopyright: string; //版权
LegalTrades: string; //合法商标
OriginalFileName: string; //原文件名
ProductName: string; //产品名称
ProductVersion: string; //产品版本
Comments: string; //注释
VsFixedFileInfo: VS_FIXEDFILEINFO;//
UserDefineValue: string; //用户自定义值,不用管它
end;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(Integer(Translation^)), 4) +
IntToHex(HiWord(Integer(Translation^)), 4) + '\';
VerQueryValue(VersionInfo, PChar(VersionValue + 'CompanyName'), InfoPointer, InfoSize);
info.CommpanyName := PChar(InfoPointer);
VerQueryValue(VersionInfo, PChar(VersionValue + 'FileDescription'), InfoPointer, InfoSize);
info.FileDescription := PChar(InfoPointer);
VerQueryValue(VersionInfo, PChar(VersionValue + 'FileVersion'), InfoPointer, InfoSize);
info.FileVersion := PChar(InfoPointer);
VerQueryValue(VersionInfo, PChar(VersionValue + 'InternalName'), InfoPointer, InfoSize);
info.InternalName := PChar(InfoPointer);
VerQueryValue(VersionInfo, PChar(VersionValue + 'LegalCopyright'), InfoPointer, InfoSize);
info.LegalCopyright := PChar(InfoPointer);
VerQueryValue(VersionInfo, PChar(VersionValue + 'LegalTrades'), InfoPointer, InfoSize);
info.LegalTrades := PChar(InfoPointer);
VerQueryValue(VersionInfo, PChar(VersionValue + 'OriginalFileName'), InfoPointer, InfoSize);
info.OriginalFileName := PChar(InfoPointer);
VerQueryValue(VersionInfo, PChar(VersionValue + 'ProductName'), InfoPointer, InfoSize);
info.ProductName := PChar(InfoPointer);
VerQueryValue(VersionInfo, PChar(VersionValue + 'ProductVersion'), InfoPointer, InfoSize);
info.ProductVersion := 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
if VerQueryValue(VersionInfo,PChar(VersionValue+UserDefine),InfoPointer,InfoSize) then
info.UserDefineValue := string(PChar(InfoPointer));
end;
FreeMem(VersionInfo);
end;
end;