Registriert seit: 10. Apr 2006
Ort: Leverkusen
989 Beiträge
Delphi 6 Professional
|
AW: Sprach ID aus Exe auslesen
21. Jul 2025, 18:54
Hmm..
So nochmals nach Recherche überarbeitet:
Delphi-Quellcode:
type
TTransRec = packed record
Lang, // language code
CharSet: Word; // character set (code page)
end;
PTransRec = ^TTransRec; // pointer to TTransRec
const
LOCALE_NAME_MAX_LENGTH = 85;
function LCIDToLocaleName(Locale: LCID; lpName: LPWSTR; cchName: Integer;
dwFlags: DWORD): Integer; stdcall;external kernel32 name 'LCIDToLocaleName';
function LocaleIDString(aLCID : DWORD): WideString;
var
strNameBuffer : array [0..LOCALE_NAME_MAX_LENGTH-1] of WideChar;
begin
Result := '';
if (LCIDToLocaleName(aLCID, strNameBuffer, LOCALE_NAME_MAX_LENGTH, 0) <> 0) then
Result := strNameBuffer;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
InfoSize: DWORD;
InfoData: Array of Byte;
Translation: PTransRec;
TranslationLen: UINT;
RecCount: Integer; // number of translation records
Idx : Integer;
begin
if OpenDialog1.Execute then
begin
InfoSize := GetFileVersionInfoSize(PChar(OpenDialog1.FileName), InfoSize);
if InfoSize > 0 then
begin
SetLength(InfoData, InfoSize);
if GetFileVersionInfo(PChar(OpenDialog1.FileName), 0, InfoSize, @InfoData[0]) then
begin
if VerQueryValue(@InfoData[0], '\VarFileInfo\Translation', Pointer(Translation), TranslationLen) then
begin
RecCount := TranslationLen div SizeOf(TTransRec);
Memo1.Lines.Add(IntToStr(RecCount));
for Idx := 0 to Pred(RecCount) do
begin
Memo1.Lines.Add(Format('Sprach-ID: %.4x, Codepage: %.4x', [Translation.Lang, Translation.CharSet]));
Memo1.Lines.Add(LocaleIDString(Translation.Lang));
Inc(Translation);
end;
end;
end;
end;
end;
end;
Mit D6 erhalte ich aber bei fast alle EXE immer nur einen Translation Eintrag!
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
|
|
Zitat
|