我在安装了中文和法语 shell 语言包 (MUI) 的 Windows XP Embedded 版本上使用 Win API 函数 EnumUILanguages,但是 API 调用仅返回一种语言代码:0409(基本 en-US 安装语言)。
如果我查看 HKLM\SYSTEM\CurrentControlSet\Control\Nls\MUILanguages\ 下的注册表,那么我可以看到所有可用的语言(0409、040C、0804)。我更喜欢使用 API 调用而不是直接访问注册表......关于为什么这个 API 调用只返回唯一语言的任何建议?
谢谢,邓肯
更新:一些代码和信息 - 我从一个带有备忘录框和按钮的表单中调用它。按下按钮,启动 WinAPI 调用,并传递一个指向 TMemoBox 的 Strings 属性的指针,以便回调函数可以写入它。
// 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;