function GetFixedFileVerInfo(const FileName: string;
out FFI: Windows.TVSFixedFileInfo): Boolean;
var
VerInfoBuf: Pointer; // points to memory storing version info
VerInfoSize: Integer; // size of version info memory
Dummy: Windows.THandle; // unused parameter required by API function
PFFI: Pointer; // points to fixed file info
FFISize: Windows.UINT; // size of file file info returned from API (unused)
begin
// Assume failure: sets zero result
FillChar(FFI, SizeOf(FFI), 0);
Result := False;
// Get size of version info: there is none if this is zero
VerInfoSize := Windows.GetFileVersionInfoSize(PChar(FileName), Dummy);
if VerInfoSize > 0 then
begin
// Allocate memory to store ver info
GetMem(VerInfoBuf, VerInfoSize);
try
// Get the version info, filling buffer
if Windows.GetFileVersionInfo(
PChar(FileName), Dummy, VerInfoSize, VerInfoBuf
) then
begin
// Get a pointer to fixed file info
if Windows.VerQueryValue(VerInfoBuf, '\', PFFI, FFISize) then
begin
// Got pointer OK: record file version
FFI := Windows.PVSFixedFileInfo(PFFI)^;
Result := True;
end;
end;
finally
// Dispose of ver info storage
FreeMem(VerInfoBuf, VerInfoSize);
end;
end;
end;
//delphi/2213