procedure TForm1.ButtonClick(Sender:
TObject);
const
SNotAvailable = '无信息';
InfoNum= 10;
InfoStr: array[ 1..InfoNum] of string = ( 'CompanyName', 'FileDescription', 'FileVersion', 'InternalName', 'LegalCopyright', 'LegalTradeMarks', 'OriginalFileName', 'ProductName', 'ProductVersion', 'Comments');
var
LanguageID,CodePage,FileVersion: string;
TranslationLength: Cardinal;
TranslationTable:^ Plongint;
InfoSize, Temp, Len: DWord;
InfoBuf: Pointer;
Value: Pchar;
Lookupstring, FilePath: string;
i: integer;
begin
filepath:=application.ExeName; //可以换其他的文件
infosize := GetFileVersionInfoSize( Pchar(FilePath), Temp); //获取文件大小的信息
if infosize> 0 then
begin
infoBuf := AllocMem(infosize); //分配内存
try
GetFileVersioninfo( Pchar(Filepath), 0, infosize, infoBuf);
if VerQueryValue(InfoBuf, '/VarFileInfo/Translation', pointer(TranslationTable), TranslationLength) then
begin
CodePage := Format( '%.4x', [HiWord( PLongInt(TranslationTable)^)]);
LanguageID := Format( '%.4x', [LoWord( PLongInt(TranslationTable)^)]);
end;
LookupString := 'StringFileInfo/' + LanguageID + CodePage + '/';
for i := 1 to InfoNum do
if VerQueryValue(infoBuf, PChar(LookupString + InfoStr[i]), Pointer(Value), Len) then
Memo1.Lines.Add(InfoStr[i] + ' = ' + Value);
finally
FreeMem(InfoBuf, infosize); // 释放内存
end;
end
else
FileVersion := SNotAvailable;
Memo1.Lines.Add(FileVersion); //写到了Memo控件中.
end;
http://hi.baidu.com/frogappear/blog/item/7a95c682f11e5f96f603a6cc.html
const
SNotAvailable = '无信息';
InfoNum= 10;
InfoStr: array[ 1..InfoNum] of string = ( 'CompanyName', 'FileDescription', 'FileVersion', 'InternalName', 'LegalCopyright', 'LegalTradeMarks', 'OriginalFileName', 'ProductName', 'ProductVersion', 'Comments');
var
LanguageID,CodePage,FileVersion: string;
TranslationLength: Cardinal;
TranslationTable:^ Plongint;
InfoSize, Temp, Len: DWord;
InfoBuf: Pointer;
Value: Pchar;
Lookupstring, FilePath: string;
i: integer;
begin
filepath:=application.ExeName; //可以换其他的文件
infosize := GetFileVersionInfoSize( Pchar(FilePath), Temp); //获取文件大小的信息
if infosize> 0 then
begin
infoBuf := AllocMem(infosize); //分配内存
try
GetFileVersioninfo( Pchar(Filepath), 0, infosize, infoBuf);
if VerQueryValue(InfoBuf, '/VarFileInfo/Translation', pointer(TranslationTable), TranslationLength) then
begin
CodePage := Format( '%.4x', [HiWord( PLongInt(TranslationTable)^)]);
LanguageID := Format( '%.4x', [LoWord( PLongInt(TranslationTable)^)]);
end;
LookupString := 'StringFileInfo/' + LanguageID + CodePage + '/';
for i := 1 to InfoNum do
if VerQueryValue(infoBuf, PChar(LookupString + InfoStr[i]), Pointer(Value), Len) then
Memo1.Lines.Add(InfoStr[i] + ' = ' + Value);
finally
FreeMem(InfoBuf, infosize); // 释放内存
end;
end
else
FileVersion := SNotAvailable;
Memo1.Lines.Add(FileVersion); //写到了Memo控件中.
end;
http://hi.baidu.com/frogappear/blog/item/7a95c682f11e5f96f603a6cc.html