Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3
  Alt 5. Aug 2002, 19:52
Einfach kopieren und ohne nachdenken benutzen:
Code:
function GetFileVersionsString(const p_sFilepath : string) : string;

const // Das Ergebnis soll ja nett formatiert sein :)
  sFixVerFormat = 'Fileversion: %d.%d.%d.%d / Productversion: %d.%d.%d.%d';

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       := Format(sFixVerFormat,[0,0,0,0,0,0,0,0]);
  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
    try
      pVerBuf := AllocMem(dwVersionSize); // Buffer initialisieren
      // 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, // 1. Stelle HiWord, deshalb nach unten schieben
            pFixBuf^.dwFileVersionMS and $0000FFFF,
            (pFixBuf^.dwFileVersionLS and $FFFF0000) shr 16,
            pFixBuf^.dwFileVersionLS and $0000FFFF,
            (pFixBuf^.dwProductVersionMS and $FFFF0000) shr 16,
            pFixBuf^.dwProductVersionMS and $0000FFFF,
            (pFixBuf^.dwProductVersionLS and $FFFF0000) shr 16,
            pFixBuf^.dwProductVersionLS and $0000FFFF
           ]);
        end;
      end;
    finally // Resourcen wieder freigeben
      FreeMem(pVerBuf,dwVersionSize);
    end;
  end;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat