开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 4444|回复: 8
收起左侧

[改进提议] 建议精易模块添加几个命令

[复制链接]
结帖率:25% (2/8)
发表于 2024-6-20 16:43:33 | 显示全部楼层 |阅读模式   河北省石家庄市
本帖最后由 yyyxb 于 2024-6-20 16:47 编辑

由于有适应多语言文本的需要,所以在官方文档中找了几个 API,为了方便,又翻译或简化编写了几个函数:API:
  
DLL命令名返回值类型公开备 注
LocaleNameToLCID整数型 失败返回0
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
LocaleNameToLCID
参数名类 型传址数组备 注
lpName字节集(使用 Unicode)指向以 null 结尾的字符串的指针(注:文本型本身为字符数组,字符数组传递形参时是作为指针传递的)(例如:“en-us”或“en_us”,不区分大小写)
dwFlags整数型在 Windows 7 之前:保留;应始终为 0,从 Windows 7 开始: 可设置为 LOCALE_ALLOW_NEUTRAL_NAMES 以允许返回中性 LCID。
DLL命令名返回值类型公开备 注
LCIDToLocaleName整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
LCIDToLocaleName
参数名类 型传址数组备 注
Locale整数型要翻译的区域设置标识符。
lpName字节集指向缓冲区的指针(宽字符)
cchName整数型区域设置名称缓冲区的大小(以字符为单位)。 区域设置名称的最大可能长度(包括终止 null 字符) LOCALE_NAME_MAX_LENGTH (85)。
dwFlags整数型在 Windows 7 之前:保留;应始终为 0,从 Windows 7 开始: 可设置为 LOCALE_ALLOW_NEUTRAL_NAMES 以允许返回中性 LCID。
DLL命令名返回值类型公开备 注
GetSystemDefaultLCID整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
GetSystemDefaultLCID
参数名类 型传址数组备 注
DLL命令名返回值类型公开备 注
GetUserDefaultLCID整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
GetUserDefaultLCID
参数名类 型传址数组备 注
DLL命令名返回值类型公开备 注
GetSystemDefaultLocaleName整数型 如果成功,则返回一个大于 0 的值,该值指示区域设置名称的长度,包括终止 null 字符。
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
GetSystemDefaultLocaleName
参数名类 型传址数组备 注
lpLocaleName字节集指向此函数在其中检索区域设置名称的缓冲区的指针。
cchLocaleName整数型lpLocaleName 指示的输出缓冲区的大小(以字符为单位)。 区域设置名称 (包括终止 null 字符) 的最大可能字符长度为 LOCALE_NAME_MAX_LENGTH。 这是建议的大小。
DLL命令名返回值类型公开备 注
GetUserDefaultLocaleName整数型 如果成功,则返回一个大于 0 的值,该值指示区域设置名称的长度,包括终止 null 字符。
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
GetSystemDefaultLocaleName
参数名类 型传址数组备 注
lpLocaleName字节集指向此函数在其中检索区域设置名称的缓冲区的指针。
cchLocaleName整数型lpLocaleName 指示的输出缓冲区的大小(以字符为单位)。 区域设置名称 (包括终止 null 字符) 的最大可能字符长度为 LOCALE_NAME_MAX_LENGTH。 这是建议的大小。
DLL命令名返回值类型公开备 注
GetLocaleInfoA整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
GetLocaleInfoA
参数名类 型传址数组备 注
Locale整数型LCID 要检索其信息的区域设置标识符。
LCType整数型要检索的区域设置信息。
lpLCData文本型指向缓冲区的指针,此函数在其中检索请求的区域设置信息。 如果 cchData 设置为 0,则不使用此指针。
cchData整数型lpLCData 指示的数据缓冲区的大小(以 TCHAR 值为单位)。 或者,应用程序可以将此参数设置为 0。 在这种情况下,函数不使用 lpLCData 参数,并返回所需的缓冲区大小,包括终止 null 字符。
DLL命令名返回值类型公开备 注
GetLocaleInfoW整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
GetLocaleInfoW
参数名类 型传址数组备 注
Locale整数型LCID 要检索其信息的区域设置标识符。
LCType整数型要检索的区域设置信息。
lpLCData字节集指向缓冲区的指针,此函数在其中检索请求的区域设置信息。 如果 cchData 设置为 0,则不使用此指针。
cchData整数型lpLCData 指示的数据缓冲区的大小(以 TCHAR 值为单位)。 或者,应用程序可以将此参数设置为 0。 在这种情况下,函数不使用 lpLCData 参数,并返回所需的缓冲区大小,包括终止 null 字符。
DLL命令名返回值类型公开备 注
GetLocaleInfoEx整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
GetLocaleInfoEx
参数名类 型传址数组备 注
Locale整数型LCID 要检索其信息的区域设置标识符。
LCType整数型要检索的区域设置信息。
lpLCData字节集指向缓冲区的指针,此函数在其中检索请求的区域设置信息。 如果 cchData 设置为 0,则不使用此指针。
cchData整数型lpLCData 指示的数据缓冲区的大小(以 TCHAR 值为单位)。 或者,应用程序可以将此参数设置为 0。 在这种情况下,函数不使用 lpLCData 参数,并返回所需的缓冲区大小,包括终止 null 字符。
DLL命令名返回值类型公开备 注
SetLocaleInfoA整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
SetLocaleInfoA
参数名类 型传址数组备 注
Locale整数型LCID 对于函数的 ANSI 版本,是区域设置的区域 设置标识符 ,其中包含解释 lpLCData 信息 时使用的代码页。 对于 Unicode 版本,将忽略此参数。
LCType整数型要设置的区域设置信息的类型。
lpLCData文本型指向以 null 结尾的字符串的指针,其中包含要设置的区域设置信息。 信息的格式必须特定于指定的常量。 应用程序将 Unicode 字符串用于函数的 Unicode 版本,将 ANSI 字符串用于 ANSI 版本。
DLL命令名返回值类型公开备 注
SetLocaleInfoW整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
SetLocaleInfoW
参数名类 型传址数组备 注
Locale整数型LCID 对于函数的 ANSI 版本,是区域设置的区域 设置标识符 ,其中包含解释 lpLCData 信息 时使用的代码页。 对于 Unicode 版本,将忽略此参数。
LCType整数型要设置的区域设置信息的类型。
lpLCData字节集指向以 null 结尾的字符串的指针,其中包含要设置的区域设置信息。 信息的格式必须特定于指定的常量。 应用程序将 Unicode 字符串用于函数的 Unicode 版本,将 ANSI 字符串用于 ANSI 版本。


函数:
  
窗口程序集名保 留  保 留备 注
程序集1   
子程序名返回值类型公开备 注
_启动子程序整数型 请在本子程序中放置易模块初始化代码
_临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
返回 (0)  ' 可以根据您的需要返回任意数值
子程序名返回值类型公开备 注
_临时子程序  
' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
' https://learn.microsoft.com/zh-cn/windows/win32/api/winnls/
' 示例:
' LCID 转语言代码
' buf = 取空白字节集 (256)  ' 创建缓冲区(由于易语言的 字节集 是动态的,初始化后的长度只有0,所以用 取空白字节集 创建一个长度的字节集作为缓冲区)
' LCIDToLocaleName (1033, buf, 取字节集长度 (buf), 0)  ' 取字节集长度 相当于 sizeof 吧。但 取文本长度 不是,相当于 strlen
' 调试输出 (编码_Unicode到Ansi (buf))  ' LCIDToLocaleName 使用宽字节,需转换
' 语言代码转 LCID
' 调试输出 (LocaleNameToLCID (编码_Ansi到Unicode (“zh-cn”), 0))  ' 同样使用宽字节
子程序名返回值类型公开备 注
区域_LCID转语言代码W字节集 
参数名类 型参考可空数组备 注
LCID整数型如"1033"
变量名类 型静态数组备 注
buf字节集 
buf = 取空白字节集 (256)
LCIDToLocaleName (1033, buf, 取字节集长度 (buf), 0)
返回 (buf)
子程序名返回值类型公开备 注
区域_LCID转语言代码_兼容文本型 
参数名类 型参考可空数组备 注
LCID整数型如"1033"
分隔符文本型一定是一个字节长的字符,只支持“-”和“_”,其余的系统无法识别。默认为“-”,如“en-US”
如果真 (是否为空 (分隔符))
分隔符 = “-”
返回 (区域_取区域信息 (LCID, 89) + 分隔符 + 区域_取区域信息 (LCID, 90))
子程序名返回值类型公开备 注
区域_语言代码转LCIDW整数型 
参数名类 型参考可空数组备 注
语言代码字节集Unicode
返回 (LocaleNameToLCID (语言代码, 取字节集长度 (语言代码)))
子程序名返回值类型公开备 注
区域_取区域信息文本型 
参数名类 型参考可空数组备 注
LCID整数型
信息类型整数型
变量名类 型静态数组备 注
buf文本型 
buf = 取空白文本 (256)
GetLocaleInfoA (LCID, 信息类型, buf, 取文本长度 (buf))
返回 (buf)
子程序名返回值类型公开备 注
区域_取区域信息W字节集 
参数名类 型参考可空数组备 注
LCID整数型
信息类型整数型
变量名类 型静态数组备 注
buf字节集 
buf = 取空白字节集 (256)
GetLocaleInfoW (LCID, 信息类型, buf, 取字节集长度 (buf))
返回 (buf)
子程序名返回值类型公开备 注
区域_取区域信息Ex字节集 
参数名类 型参考可空数组备 注
LCID整数型
信息类型整数型
变量名类 型静态数组备 注
buf字节集 
buf = 取空白字节集 (256)
GetLocaleInfoEx (LCID, 信息类型, buf, 取字节集长度 (buf))
返回 (buf)
子程序名返回值类型公开备 注
区域_置区域信息整数型 
参数名类 型参考可空数组备 注
LCID整数型LCID 对于函数的 ANSI 版本,是区域设置的区域 设置标识符 ,其中包含解释 lpLCData 信息 时使用的代码页。 对于 Unicode 版本,将忽略此参数。
信息类型整数型要设置的区域设置信息的类型。
lpLCData文本型指向以 null 结尾的字符串的指针,其中包含要设置的区域设置信息。 信息的格式必须特定于指定的常量。 应用程序将 Unicode 字符串用于函数的 Unicode 版本,将 ANSI 字符串用于 ANSI 版本。
返回 (SetLocaleInfoA (LCID, 信息类型, lpLCData))
子程序名返回值类型公开备 注
区域_置区域信息W整数型 
参数名类 型参考可空数组备 注
LCID整数型LCID 对于函数的 ANSI 版本,是区域设置的区域 设置标识符 ,其中包含解释 lpLCData 信息 时使用的代码页。 对于 Unicode 版本,将忽略此参数。
信息类型整数型要设置的区域设置信息的类型。
lpLCData字节集指向以 null 结尾的字符串的指针,其中包含要设置的区域设置信息。 信息的格式必须特定于指定的常量。 应用程序将 Unicode 字符串用于函数的 Unicode 版本,将 ANSI 字符串用于 ANSI 版本。
返回 (SetLocaleInfoW (LCID, 信息类型, lpLCData))
子程序名返回值类型公开备 注
区域_取系统默认LCID整数型 
返回 (GetSystemDefaultLCID ())
子程序名返回值类型公开备 注
区域_取用户默认LCID整数型 
返回 (GetUserDefaultLCID ())
子程序名返回值类型公开备 注
区域_取系统默认语言代码字节集 
变量名类 型静态数组备 注
buf字节集 
buf = 取空白字节集 (256)
GetSystemDefaultLocaleName (buf, 取字节集长度 (buf))
返回 (buf)
子程序名返回值类型公开备 注
区域_取用户默认语言代码字节集 
变量名类 型静态数组备 注
buf字节集 
buf = 取空白字节集 (256)
GetUserDefaultLocaleName (buf, 取字节集长度 (buf))
返回 (buf)


实际用处:
易语言自带的“取系统语言 ()”虽然算是够用吧,一般也就是中文和英文。但是要想适应更多的语言,就不够用了。而这里的命令就是用于解决这个问题的。
网上搜索“LCID”和“语言代码”能了解相关知识。
用法:
例如,我想适用英语,用易语言的“取系统语言 ()”我能取到值“2”,但是如果我想适用俄语,该怎么办呢?
那么LCID和语言代码就登场了,LCID,其实是一种区域编号,例如英语(美国)为1033,中文(简体)为2052。用 GetSystemDefaultLCID () 获取系统的 LCID,GetUserDefaultLCID () 获取用户的 LCID。(这个方法适用于 Win2k 及以上版本)
而语言代码,也是一种标记法,如英语(美国)为“en-US”,中文(简体)为“zh-CN”。用 GetSystemDefaultLocaleName () 获取系统的 语言代码,GetUserDefaultLocaleName () 获取用户的 语言代码。(这个方法适用于 Vista 及以上版本)
如果你看 系统盘中 Windows\System32 文件夹中就有以 LCID 或 语言代码 命名的文件夹, 1033 算是旧式的, en-US 算是新式的 Windows Vista 开始出场的。至于“0804”,则是LCID的16进制表示法,其实为“0x0804”
屏幕截图 2024-06-20 161506.png
LCID 和 语言代码 可以相互转化,但是将 语言代码 转为 LCID 我暂时只能实现用于 Windows Vista 及以上版本的。LCID 转 语言代码倒是可以兼容。
以下的链接可以查阅并学习:
winnls.h 标题 - Microsoft Learn (以上提供的 API 就是出自这里):https://learn.microsoft.com/zh-cn/windows/win32/api/winnls/

还有 GetLocaleInfo 系列函数,我在查的时候发现论坛已经有教程了。关于如何使用可以看:api 一日一练(132) 硬件与系统类-取本系统所在国家GetLocaleInfo函数 https://bbs.125.la/forum.php?mod=viewthread&tid=128599 (出处: 精易论坛)
以及涉及到的常量,也可以在 区域设置信息常量 - Microsoft Learn ( https://learn.microsoft.com/zh-cn/windows/win32/intl/locale-information-constants )中查。
现在有弄个模块的想法,但是个人能力实在有限,就不弄了
结帖率:25% (2/8)

签到天数: 8 天

 楼主| 发表于 2024-8-1 10:51:30 | 显示全部楼层   吉林省吉林市
修正:
  
DLL命令名返回值类型公开备 注
GetLocaleInfoEx整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
GetLocaleInfoEx
参数名类 型传址数组备 注
lpLocaleName字节集指向区域设置名称
LCType整数型要检索的区域设置信息。
lpLCData字节集指向缓冲区的指针,此函数在其中检索请求的区域设置信息。 如果 cchData 设置为 0,则不使用此指针。
cchData整数型lpLCData 指示的数据缓冲区的大小(以 TCHAR 值为单位)。 或者,应用程序可以将此参数设置为 0。 在这种情况下,函数不使用 lpLCData 参数,并返回所需的缓冲区大小,包括终止 null 字符。

  
子程序名返回值类型公开备 注
区域_取区域信息Ex整数型 
参数名类 型参考可空数组备 注
语言代码W字节集
信息类型整数型默认为“LOCALE_RETURN_NUMBER|LOCALE_ILANGUAGE”(536870912|1)
返回的数据字节集
缓冲区的大小整数型默认为85(LOCALE_NAME_MAX_LENGTH)*4
变量名类 型静态数组备 注
buf字节集 
temp整数型 
buf = 取空白字节集 (选择 (是否为空 (缓冲区的大小), 340, 缓冲区的大小))
temp = GetLocaleInfoEx (语言代码W, 选择 (是否为空 (信息类型), 位或 (536870912, 1), 信息类型), buf, 取字节集长度 (buf))
返回的数据 = buf
返回 (temp)

回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2024-7-24 22:44:03 | 显示全部楼层   河北省邢台市
自己 做个模块添加呗
回复 支持 反对

使用道具 举报

结帖率:0% (0/5)
发表于 2024-7-23 20:06:09 | 显示全部楼层   辽宁省丹东市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:88% (7/8)
发表于 2024-6-24 19:52:25 | 显示全部楼层   贵州省黔东南苗族侗族自治州
停更了就自己加到开源源码里面 在编译自己用模块
回复 支持 反对

使用道具 举报

签到天数: 6 天

发表于 2024-6-22 08:11:47 | 显示全部楼层   河南省南阳市
cf2010 发表于 2024-6-20 16:59
精易模块最近一次更新,已经过去将近6个月啦

更新完后 网络_访问  那几个命令还有问题,最后换之前版本了。
回复 支持 反对

使用道具 举报

结帖率:70% (7/10)

签到天数: 8 天

发表于 2024-6-20 18:07:46 | 显示全部楼层   甘肃省平凉市
精易模块是开源的,你觉的命令有用可以自己添加了再分享出来模块不就可以了
回复 支持 反对

使用道具 举报

结帖率:100% (7/7)

签到天数: 6 天

发表于 2024-6-20 17:39:37 | 显示全部楼层   广东省茂名市
精易模块已经停更了~
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 5 天

发表于 2024-6-20 16:59:28 | 显示全部楼层   四川省成都市
精易模块最近一次更新,已经过去将近6个月啦
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表