Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];

Вниз

Как получить дискрипшн файла?   Найти похожие ветки 

 
rolex   (2007-01-02 11:10) [0]

Как считать дискрипшн файла, версию, производителя и т.д.?


 
begin...end ©   (2007-01-02 11:45) [1]

GetFileVersionInfoSize --> GetFileVersionInfo --> VerQueryValue


 
rolex   (2007-01-02 17:36) [2]


> GetFileVersionInfoSize --> GetFileVersionInfo --> VerQueryValue

Что означают передаваемые параметры? Откуда хэндл и пр параметры взять?
И как передать результат в строку?


 
Chort ©   (2007-01-02 17:41) [3]


> rolex  

А о каких файлах идет речь?


 
begin...end ©   (2007-01-02 19:14) [4]

> rolex   (02.01.07 17:36) [2]

http://msdn2.microsoft.com/en-us/library/ms674685.aspx


 
Virgo_Style ©   (2007-01-02 19:37) [5]

Кто-то выкладывал вот такой юнит, которым я и пользуюсь... Что-то там не совсем гладко было, при каком-то определенном раскладе не выдавал информацию, хотя она была. Однако чаще все же выдавал)

Пользуясь случаем - спасибо автору)

{***********************************************************
Класс-обертка для функций:
Wrapper for API functions:
  GetFileVersionInfo,GetFileVersionInfoSize,VerQueryValue

E-mail: sergeybox@gmail.com

Последнее изменение/Last modified: 20:56 03.08.2004

ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ/USAGE SAMPLES:

-----------------------------------------------------------
 Пример 1:
 var
   FileInfo: TFileVersionInfo
   VerInfo: FFileVersion;
 begin
   // file name passed to constructor
   FileInfo := TFileVersionInfo.Create ("c:\prog.exe");
   try
     if FileInfo.HasInfo then
     begin
       Label1.Caption := FileInfo.GetString (INFO_CompanyName);
       Label2.Caption := FileInfo.GetString (INFO_FileDescription);

       VerInfo := FileInfo.GetVersion;
       Label3.Caption := Format ("%d.%d",[VerInfo.Minor,VerInfo.Major]);
     end;
   finally
     FileInfo.Free;
   end;
 end;
 
-----------------------------------------------------------
 Пример 2:
 var
   FileInfo: TFileVersionInfo
   VerInfo: FFileVersion;

 begin
   // no file name passed to constructor
   FileInfo := TFileVersionInfo.Create;
   try

     FileInfo.FileName := "c:\myprog1.Exe";  // specify file
     if FileInfo.HasInfo then
     begin
       Label1.Caption := FileInfo.GetString (INFO_CompanyName);
       Label2.Caption := FileInfo.GetString (INFO_FileDescription);

       VerInfo := FileInfo.GetVersion;
       Label3.Caption := Format ("%d.%d",[VerInfo.Minor,VerInfo.Major]);
     end;

     FileInfo.FileName := "c:\myprog2.Exe";  // specify file
     if FileInfo.HasInfo then
     begin
       Label4.Caption := FileInfo.GetString (INFO_CompanyName);
       Label5.Caption := FileInfo.GetString (INFO_FileDescription);

       VerInfo := FileInfo.GetVersion;
       Label6.Caption := Format ("%d.%d",[VerInfo.Minor,VerInfo.Major]);
     end;

   finally
     FileInfo.Free;
   end;
 end;
************************************************************}

unit VerInfo;

interface
uses Windows;

const
MaxInfoStrings = 7;

INFO_CompanyName = "CompanyName";
INFO_FileDescription = "FileDescription";
INFO_FileVersion = "FileVersion";
INFO_InternalName = "InternalName";
INFO_LegalCopyright = "LegalCopyright";
INFO_OriginalFileName = "OriginalFileName";
INFO_ProductName = "ProductName";
INFO_ProductVersion = "ProductVersion";

VersionInfoStrings: array [0..MaxInfoStrings] of string =
(
  INFO_CompanyName,
  INFO_FileDescription,
  INFO_FileVersion,
  INFO_InternalName,
  INFO_LegalCopyright,
  INFO_OriginalFileName,
  INFO_ProductName,
  INFO_ProductVersion
);

type
TFileVersion = record
  Minor,
  Major,
  Build,
  Release: WORD;
end;

TFileVersionInfo = class
private
  FFileName: string;
  FBuffer: PChar;
  FBuffLen: Cardinal;
  FLocale: string;
  procedure SetFileName(const Value: string);
  procedure LoadFile (AFileName: string);
  procedure UnloadFile;
  function GetHasInfo: Boolean;
public
  constructor Create (AFileName: string);
  destructor Destroy; override;

  property HasInfo: Boolean read GetHasInfo;
  property FileName: string read FFileName write SetFileName;
  property Locale: string read FLocale;

  function GetString (AString: string): string;
  function GetVersion: TFileVersion;

end;

implementation
uses SysUtils;

{ TFileVersionInfo }

type
TVer1 = record
  Minor: Word;
  Major: Word;
end;
TVer2 = record
  Build: Word;
  Release: Word;
end;

constructor TFileVersionInfo.Create(AFileName: string);
begin
FFileName := AFileName;
LoadFile(AFileName);
end;

destructor TFileVersionInfo.Destroy;
begin
UnloadFile;
inherited;
end;

function TFileVersionInfo.GetHasInfo: Boolean;
begin
Result := (FFileName <> "") and (FBuffLen <> 0);
end;

function TFileVersionInfo.GetString(AString: string): string;
var
InfoLen: Cardinal;
PInfo: PChar;
begin
if VerQueryValue(
  FBuffer,
  PChar("\StringFileInfo\" + FLocale + "\"+AString),
  Pointer(PInfo),
  InfoLen
) then
begin
  Result := PInfo;
end
else
  Result := ""
end;

function TFileVersionInfo.GetVersion: TFileVersion;
var
FI: PVSFixedFileInfo;
VerSize: Cardinal;
Ver1: TVer1;
Ver2: TVer2;
begin
if VerQueryValue(FBuffer,"\",Pointer(FI),VerSize) then
begin
  Ver1 := TVer1(FI.dwFileVersionMS);
  Ver2 := TVer2(FI.dwFileVersionLS);

  Result.Minor := Ver1.Minor;
  Result.Major := Ver1.Major;
  Result.Build := Ver2.Build;
  Result.Release := Ver2.Release;
end;
end;

procedure TFileVersionInfo.LoadFile(AFileName: string);
var
Dummy,LangLen: Cardinal;
LangBuff: PChar;
begin
UnloadFile;

FBuffLen := 0;

// Buffer size
FBuffLen := GetFileVersionInfoSize(
  PChar(AFileName),
  Dummy
);

if FBuffLen <> 0 then
begin
  GetMem (FBuffer,FBuffLen);

  // read resource data
  GetFileVersionInfo(
    PChar(FileName),
    0,
    FBuffLen,
    FBuffer
  );

  // check string locale
  VerQueryValue(FBuffer, "\VarFileInfo\Translation", pointer(LangBuff), LangLen);
  if langLen >= 4 then // if specified
  begin
    StrLCopy(@Dummy, LangBuff, 2);
    FLocale:= Format("%4.4x", [Dummy]);
    StrLCopy(@Dummy, LangBuff+2, 2);
    FLocale := FLocale + Format("%4.4x", [Dummy]);
  end
  else
    // use Amer. Engl, ANSI
    FLocale := "040904E4";
end;
end;

procedure TFileVersionInfo.SetFileName(const Value: string);
begin
FFileName := Value;
LoadFile(Value);
end;

procedure TFileVersionInfo.UnloadFile;
begin
FreeMem (FBuffer);
end;

end.



 
rolex   (2007-01-02 23:50) [6]

Пасиба



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.041 c
15-1167745139
Parus
2007-01-02 16:38
2007.01.21
ASP


11-1144316016
BaryVetaL
2006-04-06 13:33
2007.01.21
В догонку к BVLedNumber...


2-1168065288
Igor_Z
2007-01-06 09:34
2007.01.21
Обрезка файла


2-1167305452
Lixodei
2006-12-28 14:30
2007.01.21
Как создать файл Exel


15-1167644806
Cyrax
2007-01-01 12:46
2007.01.21
Правильное написание фр. "Теле-, аудио-, видео-, бытовая техника"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский