Получение информации о версии файла
(Версия файла 1.0.0.0)
function GetFileVer(const FileName: string): string;
{ **** >> Получение информации о версии файла Зависимости: ***************************************************** } {$B-,R-} function GetFileVer(const FileName: string): string; type PDWORD = ^DWORD; PLangAndCodePage = ^TLangAndCodePage; TLangAndCodePage = packed record wLanguage: WORD; wCodePage: WORD; end; PLangAndCodePageArray = ^TLangAndCodePageArray; TLangAndCodePageArray = array[0..0] of TLangAndCodePage; var loc_InfoBufSize: DWORD; loc_InfoBuf: PChar; loc_VerBufSize: DWORD; loc_VerBuf: PChar; cbTranslate: DWORD; lpTranslate: PDWORD; i: DWORD; begin Result := ''; if (Length(FileName) = 0) or (not Fileexists(FileName)) then Exit; loc_InfoBufSize := GetFileVersionInfoSize(PChar(FileName), loc_InfoBufSize); if loc_InfoBufSize > 0 then begin loc_VerBuf := nil; loc_InfoBuf := AllocMem(loc_InfoBufSize); try if not GetFileVersionInfo(PChar(FileName), 0, loc_InfoBufSize, loc_InfoBuf) then exit; if not VerQueryValue(loc_InfoBuf, '\\VarFileInfo\\Translation', Pointer(lpTranslate), DWORD(cbTranslate)) then exit; for i := 0 to (cbTranslate div SizeOf(TLangAndCodePage)) - 1 do begin if VerQueryValue( loc_InfoBuf, PChar(Format( 'StringFileInfo\0%x0%x\FileVersion', [ PLangAndCodePageArray(lpTranslate)[i].wLanguage, PLangAndCodePageArray(lpTranslate)[i].wCodePage])), Pointer(loc_VerBuf), DWORD(loc_VerBufSize) ) then begin Result := loc_VerBuf; Break; end; end; finally FreeMem(loc_InfoBuf, loc_InfoBufSize); end; end; end;
< Предыдущая | Следующая > |
---|