Diese Routine liefert mir unter Delphi 7 und Windows 11 für fast alle Exen unter c:\Windows\ die passende SprachID und die zugehörige Sprache im Klartext, dabei ist zu beachten, dass 0 eine gültige SprachID ist und für Sprachneutralität steht.
Delphi-Quellcode:
function GetExeLanguageID(const FileName: string; out LangID: Word; out Language : String) : Boolean;
var
InfoSize, Dummy: DWORD;
InfoData: Pointer;
TransPtr: Pointer;
TransLen: UINT;
Buffer : array[0..255] of Char;
begin
LangID := 0;
Language := '<keine FileVersionInfo vorhanden>';
InfoSize := GetFileVersionInfoSize(PChar(FileName), Dummy);
Result := InfoSize <> 0;
if not Result then Exit;
Language := '<unbekannt>';
GetMem(InfoData, InfoSize);
try
if GetFileVersionInfo(PChar(FileName), 0, InfoSize, InfoData) and
VerQueryValue(InfoData, '\\VarFileInfo\\Translation', TransPtr, TransLen) and
(TransLen >= 4) then
begin
LangID := PWord(TransPtr)^; // Language ID holen (0 für Neutral ist gültig!)
ZeroMemory(@Buffer, SizeOf(Buffer)); // Buffer vorsichtshalber leeren
if VerLanguageName(LangID, Buffer, Length(Buffer)) <> 0 then
Language := StrPas(Buffer)
else
Language := '<unbekannt>';
Result := True;
end;
finally
FreeMem(InfoData);
end;
end;