1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| TInfo = (CompanyName, FileDescription, FileVersion, InternalName, LegalCopyright, OriginalFilename, ProductName, ProductVersion);
function GetInfo(Info: TInfo; const szModule: String): String;
var
i: Integer;
nVerInfoSize: LongInt;
nVerHandle: LongWord;
szModuleName: Array [0 .. 1024] of Char;
pVerData, Buffer: Pointer;
lenBuffer: UINT;
szLangCharset, szInfo: String;
begin
FillChar(szModuleName, SizeOf(szModuleName), 0);
FillChar(pVerData, SizeOf(pVerData), 0);
if szModule = '' then
GetModuleFileName(HInstance, szModuleName, SizeOf(szModuleName))
else
begin
for i:=1 to Length(szModule) do
szModuleName[i - 1] := szModule[i];
end;
nVerInfoSize := GetFileVersionInfoSize(szModuleName, nVerHandle);
if nVerInfoSize = 0 then
Exit;
GetMem(pVerData, nVerInfoSize);
try
if not GetFileVersionInfo(szModuleName, nVerHandle, nVerInfoSize, pVerData) then
Exit;
// Récuperation du LangCharset.
if VerQueryValue(pVerData, PChar('\VarFileInfo\Translation'), Buffer, lenBuffer) then
begin
szLangCharset := IntToHex(LoWord(LongInt(Buffer^)), 4);
szLangCharset := szLangCharset + IntToHex(HiWord(LongInt(Buffer^)), 4);
end;
// Récuperation de l'info.
szInfo := GetEnumName(TypeInfo(TInfo), Ord(Info));
if VerQueryValue(pVerData, PChar('\StringFileInfo\' + szLangCharset + '\' + szInfo), Buffer, lenBuffer) and (lenBuffer <> 0) then
Result := StrPas(PWideChar(Buffer));
finally
FreeMem(pVerData, nVerInfoSize);
end;
end; |
Partager