1+ function GetFixedFileVerInfo(const FileName: string;
2+ out FFI: Windows.TVSFixedFileInfo): Boolean;
3+ var
4+ VerInfoBuf: Pointer; // points to memory storing version info
5+ VerInfoSize: Integer; // size of version info memory
6+ Dummy: Cardinal; // unused parameter required by API function
7+ PFFI: Pointer; // points to fixed file info
8+ FFISize: Windows.UINT; // size of file file info returned from API (unused)
9+ begin
10+ // Assume failure: sets zero result
11+ FillChar(FFI, SizeOf(FFI), 0);
12+ Result := False;
13+ // Get size of version info: there is none if this is zero
14+ VerInfoSize := Windows.GetFileVersionInfoSize(PChar(FileName), Dummy);
15+ if VerInfoSize > 0 then
16+ begin
17+ // Allocate memory to store ver info
18+ GetMem(VerInfoBuf, VerInfoSize);
19+ try
20+ // Get the version info, filling buffer
21+ if Windows.GetFileVersionInfo(
22+ PChar(FileName), Dummy, VerInfoSize, VerInfoBuf
23+ ) then
24+ begin
25+ // Get a pointer to fixed file info
26+ if Windows.VerQueryValue(VerInfoBuf, '\', PFFI, FFISize) then
27+ begin
28+ // Got pointer OK: record file version
29+ FFI := Windows.PVSFixedFileInfo(PFFI)^;
30+ Result := True;
31+ end;
32+ end;
33+ finally
34+ // Dispose of ver info storage
35+ FreeMem(VerInfoBuf, VerInfoSize);
36+ end;
37+ end;
38+ end;
0 commit comments