极语言官方网站

语言文字——使用示例

字符文本——相关函数

中文名称英文名称示例作用
展开环境ExpandEnvironmentStringsA展开环境(环境名,@数据,大小)展开环境变量字符串,并将其替换为为当前用户定义的值。
释放环境FreeEnvironmentStringsA释放环境(字块)释放环境字符串块。
取环境字GetEnvironmentStringsA取环境字检索当前进程的环境变量。返回值是指向当前进程的环境块的指针。
取环境量GetEnvironmentVariableA取环境量(环境名,@数据,大小)从调用进程的环境块检索指定变量的内容。
改环境字SetEnvironmentStringsA改环境字(环境变量)设置调用进程的环境字符串 (当前进程的系统和用户环境变量) 。
改环境量SetEnvironmentVariableA改环境量(环境名,内容)设置当前进程的指定环境变量的内容。
转换文字FoldStringA转换文字(转换,源字,源长,@内容,大小)将一个 Unicode 字符串映射到另一个,执行指定的转换
格式消息FormatMessageA格式消息(选项,来源,消息号
,语言,@数据,大小,格式组)
按照消息定义设置消息字符串的格式。
代码标识GetACP代码标识检索操作系统的当前 Windows ANSI 代码页标识符。
厂商代码GetOEMCP厂商代码返回操作系统的当前原始设备制造商 (OEM) 代码页标识符。
代码信息GetCPInfo代码信息(代码页,代码类)检索有关任何有效的已安装或可用代码页的信息。0=ANSI,1=OEM,2=MAC,3当前线程
码页信息GetCPInfoExA码页信息(代码页,0,代码页类)检索有关任何有效的已安装或可用代码页的信息。0=ANSI,1=OEM,2=MAC,3当前线程
货币格式GetCurrencyFormatA货币格式(区域,选项,数字串,格式,@内容,大小)将数字字符串格式化为标识符指定的区域设置的货币字符串。格式为0时选项=0x80000000,否则选项=0
货币形式GetCurrencyFormatExA货币形式(区域,选项,数字串,格式,@内容,大小)将数字字符串格式化为标识符指定的区域设置的货币字符串。格式为0时选项=0x80000000,否则选项=0
数字格式GetNumberFormatA数字格式(区域,选项,数字串,格式,@内容,大小)将数字字符串的格式设置为指定的区域设置自定义的数字字符串。格式为0时选项=0x80000000,否则选项=0
比较区字CompareStringA比较区字(区域,标志,字1,长1,字2,长2)比较标识符指定的 区域设置 的两个字符串。
比较宽字CompareStringExA比较宽字(区域,标志,字1,长1,字2,长2,版本,0,0)比较两个Unicode (宽字符) 字符串,以用于名称指定的 区域设置 。
转换语言ConvertDefaultLocale转换语言(区域)将默认区域设置值转换为实际的 区域设置标识符。
地区信息GetLocaleInfoA地区信息(区域,类型,@内容,大小)检索有关标识符指定的区域设置的信息。
地区改项SetLocaleInfoA地区改项(区域,类型,内容)设置当前区域设置的用户替代部分中的信息项。此函数不设置系统默认值。
系统地区GetSystemDefaultLCID系统地区返回系统区域设置的区域设置标识符 。
系统区名GetSystemDefaultLocaleName系统区名(@名称,大小)检索系统默认区域设置名称。
时间转字GetTimeFormatA时间转字(地区,选项,时间类,格式,@内容,大小)将时间格式化为由标识符指定的区域设置的时间字符串。选项:1不用分和秒,2不用秒,4不用标记,8不用24小时;"hh':'mm':'ss tt"
用户地区GetUserDefaultLCID用户地区返回用户默认区域设置的区域设置标识符。
用户语言GetUserDefaultLangID用户语言返回当前用户的“区域格式”设置的语言标识符 。
用户区名GetUserDefaultLocaleName用户区名(@名称,大小)检索用户默认区域设置名称。
是前导字IsDBCSLeadByte是前导字(值)确定指定的字符是否是系统默认ANSI代码页的前导字节。
前导字符IsDBCSLeadByteEx前导字符(代码页,值)确定指定的字符是否可能是前导字节。代码:0=ANSI,1=OEM,2=MAC,3当前线程
处理功能IsProcessorFeaturePresent处理功能(功能)确定当前计算机是否支持指定的处理器功能
有效码页IsValidCodePage有效码页(代码页)确定指定的代码页是否有效。
验语言组IsValidLanguageGroup验语言组(语言组,标志)确定操作系统上是安装还是支持语言组。标志:1支持安装,2支持语言组
支持地区IsValidLocale支持地区(区域,标志)确定操作系统上是安装还是支持指定的区域设置。标志:1支持安装,2支持区域设置
支持区名IsValidLocaleName支持区名(区名)确定指定的 区域设置名称 对于操作系统上安装或支持的区域设置是否有效。
地区转名LCIDToLocaleName地区转名(区域,@名称,大小,标志)将 区域设置标识符转换为区域设置名称。标志:0x08000000非特定名称
映射文字LCMapStringA映射文字(区域,标志,源字,大小,@目标,长度)使用指定的转换将输入字符串映射到另一个字符串,或者生成排序键。
映射转换LCMapStringEx映射转换(区域,标志,源字,大小,@目标,长度,版本,0,0)使用指定的转换将输入字符串映射到另一个字符串,或者生成排序键。
转系统页SetFileApisToANSI转系统页使文件 I/O 函数对当前进程使用 ANSI 字符集代码页。此函数适用于 8 位控制台输入和输出操作。
转厂商页SetFileApisToOEM转厂商页使文件 I/O 函数对当前进程使用 OEM 字符集代码页。此函数适用于 8 位控制台输入和输出操作。
语言说明VerLanguageNameA语言说明(语言,@说明,大小)检索与指定的二进制微软语言标识符关联的语言的说明字符串。
附加文字lstrcatA附加文字(文字1,"好")给文字1的字符串末尾增加文字
比较文字lstrcmpA比较文字(文字1,文字2)文字1和文字2进行比较,区分大小写
比较字母lstrcmpiA比较字母(文字1,文字2)文字1和文字2进行比较,不区分大小写
复制文字lstrcpyA复制文字(文字1,文字2)把文字2复制到文字1的内存位置
复制前字lstrcpynA复制前字(文字1,文字2,n)把文字2的前n个字符复制到文字1的内存中
字串长度lstrlenA字串长度(文字)获取文字的长度,英文1字节,汉字2字节
乘除MulDiv乘除(被乘数,乘数,除数)返回(被乘数 * 乘数 / 除数)的结果,四舍五入取整
到宽字符MultiByteToWideChar到宽字符(编码,选项,原文,长度,缓冲,大小)将字符串映射到UTF-16宽字符串。
到多字符WideCharToMultiByte到多字符(编码,选项,原文,长度,缓冲,大小,默认,是否)将UTF-16宽字符串映射到新字符串。

数字类
中文名字英文名称长度作用解释
数字类CURRENCYFMTA24包含定义数字字符串格式的信息。
数字类 成员表
中文英文类型作用解释
点数NumDigits整数小数位数。最大字符数为2
前零LeadingZero整数指示是否应在十进制字段中使用前导零的值。0无前导零;1前导零
分组Grouping整数指定的小数分隔符左侧每组数字中(紧邻和后续)的位数。 0将数字分组为 123456789.00; 3分组为123,456,789.00; 32将数字分组为 12,34,56,789.00。
十分lpDecimalSep整数指向以0结尾的十进制分隔符字符串的指针。
千分lpThousandSep整数指向以0结尾的千位分隔符字符串的指针。
负序NegativeOrder整数负数模式。

代码类
中文名字英文名称长度作用解释
代码类CPINFO18包含有关代码页的信息。
代码类 成员表
中文英文类型作用解释
字长MaxCharSize整数代码页中字符的最大长度(以字节为单位)。SBCS=1 DBCS=2
默认DefaultChar[2]文本将字符串转换为特定代码页时使用的默认字符。
前导LeadByte[12]文本前导字节范围的固定长度数组,前导字节范围的数量是可变的。

代码页类
中文名字英文名称长度作用解释
代码页类CPINFOEXA284包含有关代码页的信息。
代码页类 成员表
中文英文类型作用解释
字长MaxCharSize整数代码页中字符的最大长度(以字节为单位)。SBCS=1 DBCS=2
默认DefaultChar[2]文本将字符串转换为特定代码页时使用的默认字符。
前导LeadByte[12]文本前导字节范围的固定长度数组,前导字节范围的数量是可变的。
默字UnicodeDefaultChar整形特定代码页的翻译中使用的 Unicode 默认字符。 默认值通常是“?”字符或片假名中间点字符。=
码页CodePage整数代码页值。
名称CodePageName[260]文本代码页的全名。

映射转换类型标志

指定在字符串映射期间使用的转换类型或要生成的排序键类型的标志。此参数可以具有以下值。

英文名称数值作用解释
LCMAP_BYTEREV0x00000800使用字节反转。 例如,如果应用程序传入0x3450 0x4822,则结果为0x5034 0x2248。
LCMAP_FULLWIDTH0x00800000如果适用,请使用 Unicode (宽) 字符。 此标志和LCMAP_HALFWIDTH是互斥的。 使用此标志时,即使输入字符已经是全角字符,映射也可以使用规范化形式。
LCMAP_HALFWIDTH0x00400000在适用的情况下使用窄字符。 此标志和LCMAP_FULLWIDTH互斥。
LCMAP_HIRAGANA0x00100000将所有片假名字符映射到平假名。 此标志和LCMAP_KATAKANA是互斥的。
LCMAP_KATAKANA0x00200000将所有平假名字符映射到片假名。 此标志和LCMAP_HIRAGANA是互斥的。
LCMAP_LINGUISTIC_CASING0x01000000使用语言规则进行大小写,而不是文件系统规则 (默认) 。 此标志仅对 LCMAP_LOWERCASE 或 LCMAP_UPPERCASE 有效。
LCMAP_LOWERCASE0x00000100对于能够处理大写和小写的区域设置和脚本,请将所有字符映射到小写。
LCMAP_HASH0x00040000返回字符串的原始排序权重的哈希。要求输出缓冲区的大小为 (int)
LCMAP_SIMPLIFIED_CHINESE0x02000000将繁体中文映射到简体中文字符。 此标志和LCMAP_TRADITIONAL_CHINESE是互斥的。
LCMAP_TRADITIONAL_CHINESE0x04000000将简体中文字符映射到繁体中文。 此标志和LCMAP_SIMPLIFIED_CHINESE是互斥的。
LCMAP_SORTHANDLE0x20000000返回表示区域设置的标记,以便将来的调用可以传递 NULL 排序名称,并将以前查询的排序句柄作为最后一个参数传递。要求输出缓冲区的大小为 (lparam)
LCMAP_SORTKEY0x00000400生成规范化排序键。 如果未指定LCMAP_SORTKEY标志,函数将执行字符串映射。 有关排序键生成和字符串映射的详细信息,请参阅备注部分。
LCMAP_TITLECASE0x00000300Windows 7: 将所有字符映射到标题大写,其中每个主要单词的第一个字母都大写。
LCMAP_UPPERCASE0x00000200对于能够处理大写和小写的区域设置和脚本,将所有字符映射到大写。
以下标志可以单独或相互使用,也可以与LCMAP_SORTKEY和/或LCMAP_BYTEREV标志一起使用。
NORM_IGNORENONSPACE0x00000002忽略非节奏字符。对于许多脚本 (尤其是拉丁语脚本) ,与LINGUISTIC_IGNOREDIACRITIC一致。
NORM_IGNORESYMBOLS0x00000004忽略符号和标点。
下面列出的标志仅与 LCMAP_SORTKEY 标志一起使用。
LINGUISTIC_IGNORECASE0x00000010在语言上适当时忽略大小写。
LINGUISTIC_IGNOREDIACRITIC0x00000020在语言上适当时忽略非节奏字符。
NORM_IGNORECASE0x00000001忽略大小写。 对于许多脚本 (尤其是拉丁语脚本) ,NORM_IGNORECASE与LINGUISTIC_IGNORECASE一致。
NORM_IGNOREKANATYPE0x00010000不要区分平假名和片假名字符。 对应的平假名和片假名字符比较相等。
NORM_IGNOREWIDTH0x00020000忽略半角字符和全角字符之间的差异,例如 C a t == cat。 全角窗体是中文和日文脚本中使用的格式差异。
NORM_LINGUISTIC_CASING0x08000000使用语言规则进行大小写,而不是文件系统规则 (默认) 。
SORT_DIGITSASNUMBERS0x00000008Windows 7:在排序过程中,将数字视为数字,例如,在“10”前排序“2”。
SORT_STRINGSORT0x00001000将标点视为符号。

映射转换类型
英文名称数值作用解释
MAP_COMPOSITE0x00000040将重音字符映射到分解字符,即基字符和一个或多个非节奏字符各自具有不同的码位值的字符。 例如,Ä 由 A + ̈:拉丁文大写字母 A (U+0041) + 组合分音 (U+0308) 。 此标志等效于 Windows Vista 中的规范化形式 D。 请注意,此标志不能与MB_PRECOMPOSED一起使用。
MAP_EXPAND_LIGATURES0x00002000展开所有连字字符,使其由两个字符等效表示。 例如,连字“æ” (U+00e6) 扩展为两个字符“a” (U+0061) + “e” (U+0065) 。 此值不能与MAP_PRECOMPOSED或MAP_COMPOSITE结合使用。
MAP_FOLDCZONE0x00000010将兼容区域字符折叠到标准 Unicode 等效项中。 如果还设置了MAP_COMPOSITE标志,则此标志等效于 Windows Vista 中的规范化形式 KD。 如果未 (默认) 设置组合标志,则此标志等效于 Windows Vista 中的规范化形式 KC。
MAP_FOLDDIGITS0x00000080将所有数字映射到 Unicode 字符 0 到 9。
MAP_PRECOMPOSED0x00000020将重音字符映射到预组合字符,其中重音符和基字符合并为单个字符值。 此标志等效于 Windows Vista 中的规范化形式 C。 此值不能与 MAP_COMPOSITE 组合使用。

格式消息设置选项

格式设置选项以及如何解释 来源 参数。 选项 的低序字节指定函数如何处理输出缓冲区中的换行符。

低序字节可以指定格式化输出行的最大宽度。 下面是低序字节的可能值。

0 没有输出行宽度限制。 函数将消息定义文本中的换行符存储在输出缓冲区中。

0xFF 函数忽略消息定义文本中的常规换行符。 函数将消息定义文本中的硬编码换行符存储在输出缓冲区中。

该函数不生成新的换行符。

此参数可使用以下一个或多个值。

英文名称数值作用解释
FORMAT_MESSAGE_ALLOCATE_BUFFER0x00000100函数分配一个足够大的缓冲区(最大128K) 来保存格式化的消息,并将指向分配的缓冲区的指针放在 lpBuffer 指定的地址处。 lpBuffer 参数是指向 LPTSTR 的指针;必须将指针强制转换为 LPTSTR (例如, (LPTSTR)&lpBuffer) 。 nSize 参数指定要为输出消息缓冲区分配的最小 TCHAR 数。 调用方应使用 LocalFree 函数在不再需要缓冲区时释放缓冲区。
FORMAT_MESSAGE_ARGUMENT_ARRAY0x00002000Arguments 参数不是va_list结构,而是指向表示参数的值数组的指针。此标志不能与 64 位整数值一起使用。 如果使用 64 位整数,则必须使用 va_list 结构。
FORMAT_MESSAGE_FROM_HMODULE0x00000800lpSource 参数是一个模块句柄,其中包含要搜索的消息表资源 () 。 如果此 lpSource 句柄为 NULL,则将搜索当前进程的应用程序映像文件。 此标志不能与 FORMAT_MESSAGE_FROM_STRING 一起使用。
FORMAT_MESSAGE_FROM_STRING0x00000400lpSource 参数是指向包含消息定义的以 null 结尾的字符串的指针。 消息定义可能包含插入序列,就像消息表资源中的消息文本一样。 此标志不能与 FORMAT_MESSAGE_FROM_HMODULE 或 FORMAT_MESSAGE_FROM_SYSTEM一起使用。
FORMAT_MESSAGE_FROM_SYSTEM0x00001000函数应搜索系统消息表资源 () 请求的消息。 如果使用 FORMAT_MESSAGE_FROM_HMODULE 指定此标志,则函数在 lpSource 指定的模块中找不到该消息时搜索系统消息表。 此标志不能与 FORMAT_MESSAGE_FROM_STRING 一起使用。
FORMAT_MESSAGE_IGNORE_INSERTS0x00000200消息定义中的插入序列(如 %1)将被忽略,并传递到未更改的输出缓冲区。 此标志可用于提取消息以供以后进行格式设置。 如果设置了此标志,则忽略 Arguments 参数。

格式消息定义的位置
英文名称数值作用解释
FORMAT_MESSAGE_FROM_HMODULE0x00000800包含要搜索的消息表的模块的句柄。
FORMAT_MESSAGE_FROM_STRING0x00000400指向由未格式化消息文本组成的字符串的指针。 将扫描它以进行插入并相应地设置格式。

格式组,这些值在格式化的消息中用作插入值。
格式字符串中的 %1 指示 格式组 数组中的第一个值;%2 指示第二个参数;等等。

每个值的解释取决于与消息定义中的插入关联的格式信息。
默认值是将每个值视为指向以 null 结尾的字符串的指针。

默认情况下, 格式组 参数的类型为 va_list*,这是一种特定于语言和实现的数据类型,用于描述可变数量的参数。
返回时va_list 参数的状态未定义。
若要再次使用 va_list ,请使用 va_end 销毁变量参数列表指针,并使用 va_start重新初始化它。

如果没有 va_list*类型的指针,请指定 0x2000 标志并将指针传递到 DWORD_PTR 值的数组;
这些值被输入到格式为插入值的消息中每个插入都在数组中具有相应元素。
在消息文本中,支持多个用于动态设置消息格式的转义序列。 下表显示了这些转义序列及其含义。
所有转义序列以百分比字符 (%) 开头。
%0	终止消息文本行,不带尾随新行字符。
此转义序列可用于生成长行或终止消息本身,而无需尾随新行字符,这对于提示消息很有用。
%n!字符串!	标识插入序列。 n 的值可以介于 1 到 99 的范围内。
格式字符串 (,必须用感叹号括起来,) 是可选的,默认为 !s! 如果未指定,则为 。
格式字符串可以包含字符串的宽度和精度说明符,以及整数的宽度说明符。
使用星号 () 指定宽度和精度。例如,%1!。*s! 或 %1!*u!。

如果不使用宽度和精度说明符,则插入数字直接对应于输入参数。
例如源字符串为"%1 %2 %1",输入参数为"Bill"和"Bob",则输出字符串为"Bill Bob Bill"。

但是,如果使用宽度和精度说明符,则插入数字不直接对应于输入参数。
例如,上一示例中的插入编号可能会更改为"%1!*.*s! %4 %5!*s!"。

但是,如果使用宽度和精度说明符,则插入数字不直接对应于输入参数。
例如,上一示例中的插入编号可能会更改为"%1! *.*s! %4 %5! *s!"。
插入数字取决于是使用参数数组 (0x2000) 还是 va_list。对于参数数组,
如果上一个格式字符串包含一个星号则下一个插入编号为n+2 ;如两个星号则为n+3 。
对于 va_list,如果上一个格式字符串包含一个星号,则下一个插入号为 n+1 ;如果指定了两个星号,则为 n+2 。

如果要重复Bill,参数必须包含Bill两次。例如"%1! *.*s!  %4 %5! *s!",参数可以是 4、2、Bill、Bob、6、Bill。
然后,格式化的字符串将为"Bi Bob Bill"

当源字符串包含宽度和精度说明符时重复插入数字可能不会生成预期结果。
如果将 %5 替换为 %1,则函数将尝试在地址 6 打印字符串, (可能导致访问冲突) 。

不支持浮点格式说明符(e、E、f 和 g)。
解决方法是使用 StringCchPrintf 函数将浮点数格式化为临时缓冲区,然后使用该缓冲区作为插入字符串。

使用 I64 前缀的插入被视为两个 32 位参数。
在使用后续参数之前,必须使用它们。 请注意,使用 StringCchPrintf 而不是此前缀可能更容易。

 
百分比字符后的任何其他非数字字符在输出消息中设置格式,不带百分比字符。 下面是一些示例。

格式字符串	生成的输出
%%	单个百分号。
%space	单个空间。 此格式字符串可用于确保消息文本行中尾随空格的相应数目。
%.	单个句点。 此格式字符串可用于在行开头包含单个句点,而不会终止消息文本定义。
%!	单个感叹号。 此格式字符串可用于在插入后立即包含感叹号,而不会将其误认为是格式字符串的开头。
%n	格式字符串出现在行尾时的硬换行符。
        当 FormatMessage 提供常规换行符以便邮件适合特定宽度时,此格式字符串非常有用。
%r	不带尾随换行符的硬回车符。
%t	单个选项卡。