Windows 哪个Win32 API在区域和语言控制面板中报告格式首选项?

Windows 哪个Win32 API在区域和语言控制面板中报告格式首选项?,windows,winapi,internationalization,format,Windows,Winapi,Internationalization,Format,Windows 7和Windows Vista有一个区域和语言控制面板,其中包含一个“格式”选项卡,其中包含一个标题为“格式”的弹出菜单。此菜单允许用户从许多面向语言的设置中选择编号、货币、时间和日期格式首选项,而不考虑基本系统的语言。例如,我可以决定在美英系统中,我更喜欢默认货币符号为日元我不特别关心货币符号;这只是一个例子。这里我指的是可以通过从“格式”菜单中选择项目来应用的首选项集 Windows联系人应用程序似乎会根据此菜单中的选择更改其行为。例如,如果我选择日语,Windows联系人将

Windows 7和Windows Vista有一个区域和语言控制面板,其中包含一个“格式”选项卡,其中包含一个标题为“格式”的弹出菜单。此菜单允许用户从许多面向语言的设置中选择编号、货币、时间和日期格式首选项,而不考虑基本系统的语言。例如,我可以决定在美英系统中,我更喜欢默认货币符号为日元我不特别关心货币符号;这只是一个例子。这里我指的是可以通过从“格式”菜单中选择项目来应用的首选项集

Windows联系人应用程序似乎会根据此菜单中的选择更改其行为。例如,如果我选择日语,Windows联系人将显示并允许我编辑拼音名称(即“ruby”、“yomi”和“furigana”),但不能编辑中间名。如果选择“美国英语”,则会显示Windows联系人,并允许我编辑中间名,但不编辑拼音名


我需要编写代码(在XP SP2和更高版本上调用Win32的本机C),以反映Windows联系人应用程序在这方面的行为。我应该调用哪个API?

这个问题似乎结合了两种特性

使用控制面板小程序,可以选择常规语言设置,然后为各个格式项目提供与该语言设置关联的默认值

如果您想要检索用户的整体语言设置,那么只需获取用户的默认LCID或类似的内容

如果要检索单个格式项,我认为需要CRT函数locale()。Win32 API SetLocaleInfo可以设置区域设置的用户可重写部分。但是,至少如文档所述,GetLocaleInfo和GetLocaleInfo(仅限Vista和更高版本)获取与某些现有语言环境相关的信息,而不是来自用户覆盖。不过,标准的C locale()函数应该可以工作


您的问题询问如何检索单个格式项,但您说必须键入用户选定的常规语言环境,而不是单个格式项。根据您对Windows联系人应用程序的描述,听起来您需要GetUserDefaultLCID。

对于大多数项目,您可以使用、和等函数。与名称所暗示的相反,它们实际上会按照请求格式化数据,而不仅仅是告诉您格式应该是什么。尽管您可以为他们指定要使用的区域设置,但通常您希望传递
locale\u USER\u DEFAULT
,以使用用户在控制面板中指定的设置。

可能就是这样。我必须看看在我跳下相关菜单后它的值是否会改变。当我从菜单中选择不同的项目时,GetUserDefaultLCID的返回值确实会改变。