C++ 获取Windows启动消息的语言

C++ 获取Windows启动消息的语言,c++,windows,winapi,windows-mui,C++,Windows,Winapi,Windows Mui,我目前正试图了解MUI,GetSystemDefaultUILanguage出现了一些问题-它没有返回我所期望的语言: 用户可以在“欢迎屏幕和新用户帐户设置”对话框中设置Windows启动消息使用的语言,该对话框声称可以将语言设置复制到系统帐户。因此,我希望能够使用GetSystemDefaultUILanguage获取启动消息所使用的语言,但似乎只有最初安装操作系统时使用的语言才能返回。如何获取启动消息语言?GetSystemDefaultUILanguage似乎返回操作系统最初安装时使用的

我目前正试图了解MUI,GetSystemDefaultUILanguage出现了一些问题-它没有返回我所期望的语言:


用户可以在“欢迎屏幕和新用户帐户设置”对话框中设置Windows启动消息使用的语言,该对话框声称可以将语言设置复制到系统帐户。因此,我希望能够使用GetSystemDefaultUILanguage获取启动消息所使用的语言,但似乎只有最初安装操作系统时使用的语言才能返回。如何获取启动消息语言?

GetSystemDefaultUILanguage似乎返回操作系统最初安装时使用的语言。在2K8 R2中,至少(可能还有其他后Vista操作系统)用户可以修改用于启动消息的语言,但遗憾的是,这并没有通过GetSystemDefaultUILanguage反映出来

但是,可以通过注册表进行查询。以下值存储语言的文本描述(例如en US):

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MUI\Settings\PreferredUILanguages
此值仅在安装了多种语言的计算机上设置(可能仅在用户更改了欢迎屏幕语言时设置)

因此,要获取当前的欢迎屏幕语言,流程似乎是:

  • 尝试读取首选UILanguages
  • 如果找到,则解析为语言ID
  • 否则,调用GetSystemDefaultUILanguage
  • 根据返回的语言ID加载相应的语言资源
如果我们不想在启动时用不同的语言显示东西,这不会是一件很痛苦的事情!通常,您可以只使用GetUserDefaultUILanguage