Announcement

Collapse
No announcement yet.

exe bzw bpl dateieigenschaften auslesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • exe bzw bpl dateieigenschaften auslesen

    hallo delphi-entwickler !

    ich suche eine api-funktion, um die eigenschaften einer beliebigen exe, bpl oder dll datei auszulesen (also die eigenschaften unter 'projektoptionen' / 'versionsinfo' bzw. vom kotnextmenu im explorer).

    thx

  • #2
    hmm,

    kann mir jemand sagen, wie diese eigenschaften offiziell heißen, so daß ich selbst mal suchen kann

    Comment


    • #3
      Hallo,

      das folgende Beispiel demonstriert den Einsatz, wobei in der Win32-Hilfe für die API-Funktion <b>VerQueryValue</b> auch die restlichen Einträge genannt werden:

      <pre>
      unit OS_AboutVersionDlg;
      interface
      uses
      Windows, SysUtils, Classes, Graphics, Forms, Controls,
      StdCtrls, Buttons, ExtCtrls;
      type
      TOsAboutBox = class(TForm)
      Panel1: TPanel;
      ProgramIcon: TImage;
      ProductName: TLabel;
      Version: TLabel;
      Copyright: TLabel;
      BitBtn1: TBitBtn;
      private
      { Private declarations }
      FileName : array[0..255] of Char;
      protected
      function GetAppVersion: String;
      public
      { Public declarations }
      constructor Create(Owner: TComponent); override;
      end;
      var
      OsAboutBox: TOsAboutBox;
      implementation
      {$R *.DFM}
      constructor TOsAboutBox.Create(Owner: TComponent);
      resourcestring
      cNoVersInfo = '(Keine Versioninfo)';
      begin
      inherited Create(Owner);
      // Anwendungsname aus Application übernehmen
      ProductName.Caption := Application.Title;
      // Anwendungsicon aus Application übernehmen
      ProgramIcon.Picture.Icon:= Application.Icon;
      try
      // Name der Programmdatei auslesen
      GetModuleFileName(0, FileName, SizeOf(FileName));
      // Versionsnummer auslesen
      Version.Caption := GetAppVersion;
      except
      Version.Caption := cNoVersInfo;
      end;
      end;
      function TOsAboutBox.GetAppVersion: string;
      var
      ptrBlock, verInfo : Pointer;
      verInfoSize : Integer;
      dwTmp : DWord;
      begin
      Result := '';
      // sind Versionsinformationen enthalten ?
      verInfoSize := GetFileVersionInfoSize(FileName, dwTmp);
      if verInfoSize > 0 then
      begin
      // entsprechend großen Datenbank anfordern
      ptrBlock := AllocMem(verInfoSize);
      try
      // Daten auslesen
      GetFileVersionInfo(FileName, 0, verInfoSize, ptrBlock);
      // feststehende Daten auslesen
      VerQueryValue(ptrBlock, '\', verInfo, dwTmp);
      with PVSFixedFileInfo(verInfo)^ do
      Result := Format('Version %d.%d.%d.%d',
      [HIWORD(dwProductVersionMS),
      LOWORD(dwProductVersionMS),
      HIWORD(dwProductVersionLS),
      LOWORD(dwProductVersionLS)]);
      finally
      FreeMem(ptrBlock);
      end;
      end;
      end;
      end.
      </pre>
      Der Info-Dialog wird dann vom Programm aus aufgerufen:
      <pre>
      uses OS_AboutVersionDlg;
      procedure TForm1.Button1Click(Sender: TObject);
      begin
      OsAboutBox := TOsAboutBox.Create(self);
      try
      OsAboutBox.ShowModal;
      finally
      OsAboutBox.Release;
      end;
      end;
      </pre&gt

      Comment


      • #4
        danke ! das ist genau das, was ich gesucht habe

        Comment

        Working...
        X