Windows 获得用户';控制面板中的首选语言列表?

Windows 获得用户';控制面板中的首选语言列表?,windows,winapi,localization,globalization,Windows,Winapi,Localization,Globalization,在Windows 10的“语言设置”控制面板中(以及旧版本——这似乎是在Win8中引入的?)有一个“首选语言”列表。以编程方式获取该列表的正确方法是什么 我可以看到它存储在注册表中的HKEY\U CURRENT\U USER\Control Panel\International\USER Profile\Languages,但我认为它不是直接读取的 我发现了一个API,它听起来是正确的,但是它返回了错误的结果 具体来说,在控制面板和注册表项中,我当前拥有列表en NZ en US it,但AP

在Windows 10的“语言设置”控制面板中(以及旧版本——这似乎是在Win8中引入的?)有一个“首选语言”列表。以编程方式获取该列表的正确方法是什么

我可以看到它存储在注册表中的
HKEY\U CURRENT\U USER\Control Panel\International\USER Profile\Languages
,但我认为它不是直接读取的

我发现了一个API,它听起来是正确的,但是它返回了错误的结果

具体来说,在控制面板和注册表项中,我当前拥有列表
en NZ en US it
,但API返回
en GB
en US
。我不知道这是从哪里来的。(或者为什么意大利语不见了。)

API确实正确地返回了
en NZ
,但它似乎也是从其他地方得到的——当我在控制面板中重新排列语言列表时,注册表会更新,但API返回值不会更改


我想要完整的语言列表,而不仅仅是一个答案。(另外,出于好奇,API从哪个控制面板获得答案?

可能需要注意的是,如果我在PowerShell中运行,那么它会正确报告与控制面板匹配的语言列表。然而,这不是我想要的那种API。我没有尝试过
EnumUILanguages
(正如现在删除的注释所建议的那样),因为它的文档中没有一个表示它将按优先顺序返回值。事实上,结果似乎是
en GB
en US
——这稍微好一点,至少意大利语看起来是这样的,但即使我把意大利语作为首选语言列表中的第一语言,它仍然是按这个顺序出现的。而且它仍然在说<代码> Engb>代码>而不是<代码> EN NZ < /Cord>。对你有用吗?我不这么认为。我想从非托管C++(MFC)和C语言(.NET框架)中获取值,这两个值都来自常规桌面应用程序。我不想对Win8LIBS有一个硬依赖,在德雷克的链接工作中,WiR.API中可能有一些Win7用户,用于C++和C语言,还有桌面应用程序,它们被标记为“通用语言”。但它只能在Windows10上运行。对于其他系统,您是否尝试过EnumUILanguages(适用于我):