GetGeoInfoA 函数 (winnls.h)
[GetGeoInfo 可用于“要求”部分中指定的操作系统。 在后续版本中可能会更改或不可用。 请改用 GetGeoInfoEx。
]
检索有关指定地理位置的信息。
语法
int GetGeoInfoA(
[in] GEOID Location,
[in] GEOTYPE GeoType,
[out, optional] LPSTR lpGeoData,
[in] int cchData,
[in] LANGID LangId
);
参数
[in] Location
要获取信息的地理位置的标识符。 有关详细信息,请参阅 地理位置表。 可以通过调用 EnumSystemGeoID来获取可用值。
[in] GeoType
要检索的信息类型。 可能的值由 SYSGEOTYPE 枚举定义。 如果 GeoType 的值GEO_LCID,则函数将检索区域设置标识符。 如果 GeoType 的值GEO_RFC1766,该函数将检索符合 RFC 4646(Windows Vista)的字符串名称。 有关详细信息,请参阅“备注”部分。
Windows XP: 当 GeoType 设置为GEO_LCID时,检索的字符串是 8 位十六进制值。
Windows Me: 当 GeoType 设置为GEO_LCID时,检索的字符串是十进制值。
[out, optional] lpGeoData
指向此函数检索信息的缓冲区的指针。
[in] cchData
lpGeoData指示的缓冲区的大小。 大小是函数 ANSI 版本的字节数,或 Unicode 版本的字数。 如果函数返回所需的缓冲区大小,应用程序可以将此参数设置为 0。
[in] LangId
语言的标识符,与 位置的值一起使用。 应用程序可以将此参数设置为 0,并为 GeoType指定GEO_RFC1766或GEO_LCID。 此设置通过调用 getUserDefaultLangID调用
返回值
返回输出缓冲区中检索的地理位置信息的字节数(ANSI)或单词(Unicode)。 如果 cchData 设置为 0,该函数将返回缓冲区所需的大小。
如果函数不成功,则返回 0。 若要获取扩展的错误信息,应用程序可以调用 GetLastError,这会返回以下错误代码之一:
- ERROR_INSUFFICIENT_BUFFER。 提供的缓冲区大小不够大,或者错误地设置为 NULL。
- ERROR_INVALID_PARAMETER。 任何参数值都无效。
言论
如果应用程序为 GeoType指定GEO_RFC1766,则应为适用于指定地理位置标识符的 LangId 指定语言标识符。 适当的语言是非区域设置中性语言,或者是具有与指定标识符对应的区域设置的语言。 生成的字符串符合 RFC 4646 (Windows Vista),构成 区域设置名称。
例如,如果 位置 指定为美国0xF4,则 GeoType 指定为GEO_RFC1766,并且 LangId 指定为非特定区域设置英语的0x09或英语(美国)的0x409),则函数在成功返回时检索“en-US”。 事实上,该函数忽略语言的区域设置特定部分。 因此,如果应用程序将 LangId 指定为英语(英国)0x809,则函数还会将“en-US”写入 lpGeoData。
请考虑另一个示例。 如果 位置 指定为美国0xF4,GeoType 指定为GEO_RFC1766,并且 LangId 指定为中文0x04,则函数在成功返回时检索“zh-US”。 这不是受支持的区域设置的名称。
如果应用程序为 GeoType指定GEO_LCID,则函数会将语言标识符视为区域设置标识符(LCID)。 如果它以某种方式与提供的地理标识符相关联,它将尝试返回区域设置标识符。
注意
winnls.h 标头将 GetGeoInfo 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows XP [桌面应用 |UWP 应用] |
支持的最低服务器 | Windows Server 2003 [桌面应用 |UWP 应用] |
目标平台 | 窗户 |
标头 | winnls.h (包括 Windows.h) |
库 | Kernel32.lib |
DLL | Kernel32.dll |