Я использую функцию Win API EnumUILanguages в сборке Windows XP Embedded, в которой установлены языковые пакеты оболочки для китайского и французского языков (MUI), однако вызов API возвращает только один языковой код: 0409 (базовый установленный язык en-US ).
Если я загляну в реестр по адресу HKLM \ SYSTEM \ CurrentControlSet \ Control \ Nls \ MUILanguages \, то я смогу увидеть все доступные языки (0409, 040C, 0804). Я предпочел бы использовать вызов API вместо непосредственного доступа к реестру .... любые предложения относительно того, почему этот вызов API возвращает только единственный язык?
Спасибо, Дункан
Обновление : немного кода и информации - я звоню из формы с блокнотом и кнопкой. Нажмите кнопку, вызов WinAPI инициируется, и указатель на свойство Strings TMemoBox передается, чтобы функция обратного вызова могла записать в него.
// The Button handler
procedure TForm1.btnEnumLangsClick(Sender: TObject);
var
dwFlags : DWORD;
callback : TEnumUILanguagesProc;
begin
dwFlags := 0; // Same as MUI_LANGUAGE_ID for WinXP compat
EnumUILanguagesW( @EnumUILanguages_Callback,
dwFlags,
LParam(memoUILangs.Lines) // Pointer to Memo box text lines
);
end;
// API Callback function:
function EnumUILanguages_Callback(lpUILanguageString: PWideChar;
List: TStringList): BOOL; stdcall;
begin
// Add language ID to the memo box
List.Add(lpUILanguageString);
// Return true so the callback continues to run
Result := True;
end;