Von
himitsu kommt folgende Version mit dem Zusatz, dass angezeigt wird, um welche Art der Version es sich handelt.
z.B.:
debug = Fehlersuche
beta = Testversion
private = Privates Build
special = Spezielles Build
Für die Datei (EXE/
DLL) - meist das eigene Programm:
Delphi-Quellcode:
Function GetFileVersion: String;
Var i, W: LongWord;
P: Pointer;
FI: PVSFixedFileInfo;
Begin
Result := 'NoVersionInfo';
i := GetFileVersionInfoSize(PChar(ParamStr(0)), W);
If i = 0 Then Exit;
GetMem(P, i);
Try
If not GetFileVersionInfo(PChar(ParamStr(0)), W, i, P)
or not VerQueryValue(P, '\', Pointer(FI), W) Then Exit;
Result := IntToStr(FI^.dwFileVersionMS shr 16)
+ '.' + IntToStr(FI^.dwFileVersionMS and $FFFF)
+ '.' + IntToStr(FI^.dwFileVersionLS shr 16)
+ '.' + IntToStr(FI^.dwFileVersionLS and $FFFF);
If FI^.dwFileFlags and VS_FF_DEBUG <> 0 Then Result := Result + ' debug';
If FI^.dwFileFlags and VS_FF_PRERELEASE <> 0 Then Result := Result + ' beta';
If FI^.dwFileFlags and VS_FF_PRIVATEBUILD <> 0 Then Result := Result + ' private';
If FI^.dwFileFlags and VS_FF_SPECIALBUILD <> 0 Then Result := Result + ' special';
Finally
FreeMem(P);
End;
End;
Und wer es für andere Dateien braucht:
Delphi-Quellcode:
Function GetFileVersion(Const FileName: String): String;
Var i, W: LongWord;
P: Pointer;
FI: PVSFixedFileInfo;
Begin
Result := 'NoVersionInfo';
i := GetFileVersionInfoSize(PChar(FileName), W);
If i = 0 Then Exit;
GetMem(P, i);
Try
If not GetFileVersionInfo(PChar(FileName), W, i, P)
or not VerQueryValue(P, '\', Pointer(FI), W) Then Exit;
Result := IntToStr(FI^.dwFileVersionMS shr 16)
+ '.' + IntToStr(FI^.dwFileVersionMS and $FFFF)
+ '.' + IntToStr(FI^.dwFileVersionLS shr 16)
+ '.' + IntToStr(FI^.dwFileVersionLS and $FFFF);
If FI^.dwFileFlags and VS_FF_DEBUG <> 0 Then Result := Result + ' debug';
If FI^.dwFileFlags and VS_FF_PRERELEASE <> 0 Then Result := Result + ' beta';
If FI^.dwFileFlags and VS_FF_PRIVATEBUILD <> 0 Then Result := Result + ' private';
If FI^.dwFileFlags and VS_FF_SPECIALBUILD <> 0 Then Result := Result + ' special';
Finally
FreeMem(P);
End;
End;
PS: GetFileVersion(ParamStr(0)), oder GetFileVersion(Application.ExeName) geben das selbe wie der erste Code zurück
Die im Bild rosa markierten Felder werden genutzt
und wenn keine VersionsInfo vorhanden ist, dann kommt der erste String ('NoVersionInfo') raus.