Вопрос
Как извлечь информацию из ресурса «Version» — полностью все данные, потому что при ответах на форумах отвечают: «Пользуйся функциями GetFileVersionInfo и VerQueryValue» или приводят пример как получить версию файла, типа Major, Minor. Мне же нужно получить FileDescription и тому подобное. Как добраться до этих данных. Пример лучше или на чистом API или на Делфи, так как в С++ я полный ноль.
Ответ
Например так:
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject);
private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
iDataSize : Integer; pData : Pointer; implementation {$R *.DFM} function GetVersionString( Key : String ): String; var Dummy : Cardinal; P : Pointer;
S : String; Buffer : PChar; begin Result := '';
if iDataSize > 0 then begin VerQueryValue( pData, '\VarFileInfo\Translation', P, Dummy );
S := Format( '\StringFileInfo\%.4x%.4x\%s', [ LoWord( Integer( P^ ) ), HiWord( Integer( P^ ) ), Key ] );
if VerQueryValue( pData, PChar( S ), Pointer( Buffer ), Dummy ) then Result := StrPas( Buffer );
end;
end;
procedure GetVer(FileName : String);
var Dummy : Cardinal;
KeyNAme : String;
begin iDataSize := GetFileVersionInfoSize( PChar( FileName ), Dummy );
GetMem( pData, iDataSize );
GetFileVersionInfo( PChar( ParamStr( 0 ) ), 0, iDataSize, pData );
KeyName := 'CompanyName';
ShowMessage(KeyName + ':' + GetVersionString( KeyName ));
KeyName := 'FileDescription';
ShowMessage(KeyName + ':' + GetVersionString( KeyName ));
KeyName := 'FileVersion';
ShowMessage(KeyName + ':' + GetVersionString( KeyName ));
KeyName := 'InternalName';
ShowMessage(KeyName + ':' + GetVersionString( KeyName ));
KeyName := 'LegalCopyright';
ShowMessage(KeyName + ':' + GetVersionString( KeyName ));
KeyName := 'OriginalFilename';
ShowMessage(KeyName + ':' + GetVersionString( KeyName ));
KeyName := 'ProductName';
ShowMessage(KeyName + ':' + GetVersionString( KeyName ));
KeyName := 'ProductVersion';
ShowMessage(KeyName + ':' + GetVersionString( KeyName ));
KeyName := 'Comments';
ShowMessage(KeyName + ':' + GetVersionString( KeyName ));
KeyName := 'LegalTrademarks';
ShowMessage(KeyName + ':' + GetVersionString( KeyName )); end;
procedure TForm1.Button1Click(Sender: TObject); begin GetVer('Path_to_My_file');
end;
end.
Из конференции Expert_FAQ
Copyright 2000-2004 Сообщество Чайников
Контактная информация