Einzelnen Beitrag anzeigen

MathiasSimmack
(Gast)

n/a Beiträge
 
#3

Re: Versionnummer des Programm auslesen?

  Alt 26. Okt 2003, 12:35
Irgendwann mal ... äh ... geliehen von Luckie (glaube ich):
Delphi-Quellcode:
unit FileVer;

interface

function GetFileVersionsString(const p_sFilepath : string) : string;


implementation

uses
  Windows, SysUtils;

const
  sFixVerFormat = ' %d.%d.%d.%d';

function GetFileVersionsString(const p_sFilepath : string) : string;
var
  dwVersionSize : DWord; // Buffer für die Grösse der Versionsinfo der abgefragten Datei
  dwDummy : DWord; // Dummy, Wert wird nicht benötigt
  pVerBuf : Pointer; // Buffer für die Versionsdaten
  pFixBuf : PVSFixedFileInfo; // Buffer für die Versionsinfo fester Länge
  sReqdInfo : string; // Hier kommt rein, welcher Teil der Versionsinfo abgefragt werden soll
begin
  // Annahme: Die Datei hat keine Versionsinfo
  Result := '';

  dwDummy := 0; // Dummy initialisieren
  sReqdInfo := '\'; // Es soll die Versionsinfo fester Länge abgefragt werden

  // Mal sehen, wieviel Platz die Versionsinfo der Datei braucht
  dwVersionSize := GetFileVersionInfoSize(PChar(p_sFilepath),dwDummy);
  if dwVersionSize > 0 then begin // Wenn > 0, dann Versionsinfo vorhanden
    GetMem(pVerBuf,dwVersionSize);
    try
      fillchar(pVerBuf^,dwVersionSize,0);

      // Gesamte Versionsinformationen auslesen
      if GetFileVersionInfo(PChar(p_sFilepath),0,dwVersionSize,pVerBuf) then
        begin // Werte für Versionsinfo fester Länge extrahieren
          if VerQueryValue(pVerBuf,PChar(sReqdInfo),Pointer(pFixBuf),dwDummy) then
            begin
              // und als Ergebnis ausgeben
              Result := Format(sFixVerFormat,
                [(pFixBuf^.dwFileVersionMS and $FFFF0000) shr 16,
                 pFixBuf^.dwFileVersionMS and $0000FFFF,
                 (pFixBuf^.dwFileVersionLS and $FFFF0000) shr 16,
                 pFixBuf^.dwFileVersionLS and $0000FFFF]);
        end;
      end;
    finally // Resourcen wieder freigeben
      FreeMem(pVerBuf,dwVersionSize);
    end;
  end;
end;

end.
Ins Projekt einbinden, und bspw. so aufrufen:
Delphi-Quellcode:
  MessageBox(self.Handle,
    pchar(self.Caption + GetFileVersionsString(paramstr(0)) + #13#10 +
      INFOABOUT + #13#10#13#10 + LICENSEABOUT + #13#10#13#10 + URLSABOUT),
    pchar(self.Caption),
    MB_OK or MB_ICONINFORMATION);
  Mit Zitat antworten Zitat