//自定义读文件版本信息的函数
function TForm1.GetFileVerInfo(FileName:string):TStrings;
const
InfoNum = 9;
InfoStr: array[1..InfoNum] of string =(
'ProductName',
'ProductVersion',
'FileDescription',
'LegalCopyright',
'FileVersion',
'CompanyName',
'LegalTradeMarks',
'InternalName',
'OriginalFileName'
);
var
Buf: PChar;
BufSize,Len: DWORD;
Value: PChar;
StringList:TStrings;
begin
StringList:=TStringList.Create;
BufSize := GetFileVersionInfoSize(PChar(FileName),BufSize);
if BufSize > 0 then
begin
Buf := AllocMem(BufSize);
GetFileVersionInfo(PChar(FileName),0,BufSize,Buf);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[1]), Pointer(Value),Len) then StringList.Add('产品名称: '+ Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[2]), Pointer(Value), Len) then StringList.Add('产品版本: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[3]), Pointer(Value), Len) then StringList.Add('文件说明: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[4]), Pointer(Value), Len) then StringList.Add('合法版权: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[5]), Pointer(Value), Len) then StringList.Add('文件版本: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[6]), Pointer(Value), Len) then StringList.Add('公司名称: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[7]), Pointer(Value), Len) then StringList.Add('合法商标: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[8]), Pointer(Value), Len) then StringList.Add('内部名称: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[9]), Pointer(Value), Len) then StringList.Add('原文件名: ' + Value);
FreeMem(Buf, BufSize);
end
else StringList.Add('无版本信息......OK');
Result:=StringList;
StringList.Free;
end;
//=======================================================================//调用上面的函数
procedure TForm1.Button1Click(Sender: TObject);
var
List:TStrings;
begin
List:=TStringList.Create;
List:=GetFileVerInfo(Application.ExeName);
Memo1.Lines.AddStrings(List); //在这里出错,请帮我,我就50分了
List.Free;
end;
function TForm1.GetFileVerInfo(FileName:string):TStrings;
const
InfoNum = 9;
InfoStr: array[1..InfoNum] of string =(
'ProductName',
'ProductVersion',
'FileDescription',
'LegalCopyright',
'FileVersion',
'CompanyName',
'LegalTradeMarks',
'InternalName',
'OriginalFileName'
);
var
Buf: PChar;
BufSize,Len: DWORD;
Value: PChar;
StringList:TStrings;
begin
StringList:=TStringList.Create;
BufSize := GetFileVersionInfoSize(PChar(FileName),BufSize);
if BufSize > 0 then
begin
Buf := AllocMem(BufSize);
GetFileVersionInfo(PChar(FileName),0,BufSize,Buf);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[1]), Pointer(Value),Len) then StringList.Add('产品名称: '+ Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[2]), Pointer(Value), Len) then StringList.Add('产品版本: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[3]), Pointer(Value), Len) then StringList.Add('文件说明: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[4]), Pointer(Value), Len) then StringList.Add('合法版权: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[5]), Pointer(Value), Len) then StringList.Add('文件版本: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[6]), Pointer(Value), Len) then StringList.Add('公司名称: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[7]), Pointer(Value), Len) then StringList.Add('合法商标: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[8]), Pointer(Value), Len) then StringList.Add('内部名称: ' + Value);
if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[9]), Pointer(Value), Len) then StringList.Add('原文件名: ' + Value);
FreeMem(Buf, BufSize);
end
else StringList.Add('无版本信息......OK');
Result:=StringList;
StringList.Free;
end;
//=======================================================================//调用上面的函数
procedure TForm1.Button1Click(Sender: TObject);
var
List:TStrings;
begin
List:=TStringList.Create;
List:=GetFileVerInfo(Application.ExeName);
Memo1.Lines.AddStrings(List); //在这里出错,请帮我,我就50分了
List.Free;
end;
解决方案 »
- 回答问题送国际域名一个,加300分,ActiveForm超高手请进,绝世难题。回答正确后直接找QQ:82865领奖
- 怎样调用*.CHM或*.hlp帮助文件,在线等。。。。。。。。。。
- 通过线程怎样读取数据;
- 高分求ado连接oracle查询的代码
- 问一简单问题:随机创建一个窗口背景
- 为什么我的荣誉分只有81分了?10分钟结贴
- 太慢了了,如何提速??
- 编绎时,时而出现"Access Violation at address 77f499ed in module 'GDI32.dll' "
- 为什么我加载一个自己写的DLL时会报cannot create application object in a shared object or library
- 如何强制刷新窗口,我使用Form1.Update;没有用;
- 怎样定义一个热键在Form上
- 帮忙翻译一下VB写的MSCOMM控件程序。
function TForm1.GetFileVerInfo(FileName:string; var R: TStrings):Boolean;在这个函数中不要对R进行Free的操作,在你真正用完后再释放。