AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi FileInfo (Dateiversion und andere Resourcen)
Thema durchsuchen
Ansicht
Themen-Optionen

FileInfo (Dateiversion und andere Resourcen)

Ein Thema von himitsu · begonnen am 2. Jun 2010 · letzter Beitrag vom 3. Jun 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

FileInfo (Dateiversion und andere Resourcen)

  Alt 2. Jun 2010, 10:36
Diese "Klasse" ließt Dateiversion, das Kompilierungsdatum und die Versionsresource aus.
Delphi-Quellcode:
// vsLong 1.2.3.4
// vsCompact 1.2-34
// vsShort 1.2
// vsNatural 1.2c if patch=0 then 1.2 | if patch>26 then 1.2.3
// vsNaturalBuild 1.2c (4)
// Prefix v

TVersionStr = (vsLong, vsCompact, vsShort, vsNatural, vsNaturalBuild,
  vsLongPrefix, vsCompactPrefix, vsShortPrefix, vsNaturalPrefix, vsNaturalBuildPrefix);
TVersion = Record
Private
  Function Get(Mode: TVersionStr): String;
Public
  Property asString[Mode: TVersionStr]: String Read Get; Default;
  Case Integer of
    0: (VersionMS, VersionLS: LongWord);
    1: (Minor, Major: Word;
        Build, Patch: Word);
    2: (MinorRelease, MajorRelease: Word;
        BuildNumber, PatchLevel: Word);
End;
TFileFlags = Set of (ffDebug, ffPrerelease, ffPatched, ffPrivateBuild, ffInfoInferred, ffSpecialBuild);
{$MINENUMSIZE 2}
TInfoKeyType = (ktBinary, ktText);
{$MINENUMSIZE 1}
TInfoLanguage = Record
Private
  Function Get(Format: Integer): Word;
Public
  Value: LongWord;

  Property LangID: Word Index $10FFFF Read Get;
  Property MajorLang: Word Index $1003FF Read Get;
  Property SubLang: Word Index $1AFC00 Read Get;

  Property Codepage: Word Index $00FFFF Read Get;
End;
TStringTable = Record
  Key: String;
  Typ: TInfoKeyType;
  Text: String;
End;
TStringFileInfo = Record
  Lang: TInfoLanguage;
  Table: Array of TStringTable;
End;

TFileInfo = Record
Private
  FLang: LangID;
  ...
Public
  FileVersion: TVersion;
  ProductVersion: TVersion;
  FileFlags: TFileFlags;
  FileOS: LongWord; // Windows.VOS_…
  FileType: LongWord; // Windows.VFT_…
  FileSubtype: LongWord; // Windows.VFT2_…
  FileDate: TDateTime;
  Strings: Array of TStringFileInfo;

  Class Function Get (Filename: String = ''): TFileInfo; Static;
  Function Load(Filename: String = ''): Boolean;

  Property Version[Mode: TVersionStr]: String Read GetVersion; // FileVersion + FileFlags
  Property Typ: String Read GetType;

  Function LanguagesCount: Integer;
  Property Languages[i: Integer]: LANGID Read GetLang;

  Property Language: LANGID Read FLang Write FLang;
  Property CompanyName: String Index 0 Read GetStr;
  Property ProductName: String Index 1 Read GetStr;
  Property ProductVersion_Str: String Index 2 Read GetStr;
  Property FileVersion_Str: String Index 3 Read GetStr;
  Property FileDescription: String Index 4 Read GetStr;
  Property InternalName: String Index 5 Read GetStr;
  Property OriginalFilename: String Index 6 Read GetStr;
  Property LegalCopyright: String Index 7 Read GetStr;
  Property LegalTrademarks: String Index 8 Read GetStr;
  Property Comments: String Index 9 Read GetStr;
  Property PrivateBuild: String Index 10 Read GetStr;
  Property SpecialBuild: String Index 11 Read GetStr;
End;
Beispiel:
Delphi-Quellcode:
var Info: TFileInfo;

Info.Load; // ohne Dateiname wird die eigene Anwendung ausgelesen
ShowMessage(Info.Version[vsLong] + ' ' + DateTimeToStr(Info.FileDate));
// Freigeben nicht nötig (außer wenn man den Record zur Klasse umgebaut hat)
wobei auch sowas möglich ist
x := TFileInfo.Get.FileDate; Noar, das Ganze ist zwar nicht als Klasse erstellt, aber es läßt sich notfalls umrüsten, indem man
Delphi-Quellcode:
Class Function Get (Filename: String = ''): TFileInfo; Static;
Function Load(Filename: String = ''): Boolean;
durch dieses ersetzt
Constructor Create(Filename: String = '');
@Manager der CL:
Wir haben hierzu schon zwei sehr ähnliche Eintäge, in verschiedenen Rubriken.

Code-Library -> Sonstiges -> Versionsinformationen einer EXE- oder DLL-Datei abfragen
Code-Library -> Dateien / Laufwerke -> Dateiversionsinformationen auslesen
Angehängte Dateien
Dateityp: pas fileinfo__dateiversion_und_andere_resourcen__202.pas (14,3 KB, 87x aufgerufen)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: FileInfo (Dateiversion und andere Resourcen)

  Alt 3. Jun 2010, 00:38
kleine Fehlerkorrektur
in TVersion wurden ein paar Words umgedreht (blödes LittleEndian, aber jetzt weiß ich endlich warum mir da was komisch vorkam)

nja und ansonsten wurden auch ein paar andere Dinge anders gelöst.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz