diff --git a/FarHints/FarHintsVerInfo/FarHintsVerInfoMain.pas b/FarHints/FarHintsVerInfo/FarHintsVerInfoMain.pas index d6ce361..697dc8d 100644 --- a/FarHints/FarHintsVerInfo/FarHintsVerInfoMain.pas +++ b/FarHints/FarHintsVerInfo/FarHintsVerInfoMain.pas @@ -99,7 +99,7 @@ TPluginObject = class(TInterfacedObject, IHintPlugin) vCP :^LANGANDCODEPAGE; vPtr, vEnd :PWideChar; begin - { , Translation StringInfo } + { Ищем сканированием, потому что иногда Translation не совпадает с StringInfo } vPtr := vBuf; vEnd := vBuf + (vSize div SizeOf(WideChar)) - Length(cStrInfo) - 4 - 8; while vPtr < vEnd do begin @@ -111,7 +111,7 @@ TPluginObject = class(TInterfacedObject, IHintPlugin) Inc(vPtr); end; - { ( 16- ), Translation} + { Не нашли сканированием (возможно 16-ти разрядная программа), попробуем через Translation} if VerQueryValue(vBuf, '\VarFileInfo\Translation', Pointer(vCP), vLen) then vLang := FAPI.Format('%.4x%.4x', [vCP.wLanguage, vCP.wCodePage]); end; @@ -127,9 +127,21 @@ TPluginObject = class(TInterfacedObject, IHintPlugin) AItem.AddStringInfo(APrompt, vStr); end; + procedure VerAdd(const APrompt: WideString; const MS, LS: DWORD); + begin + if (MS or LS) <> 0 then + AItem.AddStringInfo(APrompt, + FAPI.Format('%d.%d.%d.%d', [HiWord(MS), LoWord(MS), HiWord(LS), Loword(LS)])); + end; + + type + PFFI = ^TVSFixedFileInfo; + var vName :TString; vTemp :DWORD; + vFixIn: PFFI; + vFixLen: UINT; begin Result := False; vName := AItem.FullName; @@ -142,10 +154,14 @@ TPluginObject = class(TInterfacedObject, IHintPlugin) AItem.AddStringInfo(GetMsg(strName), AItem.Name); + if VerQueryValue(vBuf, '\', Pointer(vFixIn), vFixLen) then + with vFixIn^ do + VerAdd(GetMsg(strVersion), dwFileVersionMS, dwFileVersionLS); + if vLang <> '' then begin LocAdd(GetMsg(strDescription), 'FileDescription'); LocAdd(GetMsg(strCopyright), 'LegalCopyright'); - LocAdd(GetMsg(strVersion), 'FileVersion'); +// LocAdd(GetMsg(strVersion), 'FileVersion'); // LocAdd('CompanyName'); // LocAdd('OriginalFilename'); // LocAdd('InternalName');