Closed CharlesMengCA closed 6 months ago
这个是原来用来自动根据当前系统设置切换显示简繁界面的,可能有洞。如果有更好的方案,pr wellcome
问题出在WeaselSetup /u,
如果Preferred languages 只有 English(US) 和Chinese(Simplified, China)
WeaselSetup /u,会删除Chinese(Simplified, China),然后安装(或是恢复) Chinese(Traditional, Taiwan)。
再执行WeaselSetup /s 就会出现我上面的截图的情况。
问题出在这里,不知道什么原因, 删除不存在的语言反而变成了安装: (*pfnInstallLayoutOrTip)(PSZTITLE_HANT, ILOT_UNINSTALL);
HMODULE hInputDLL = LoadLibrary(TEXT("input.dll"));
if (hInputDLL) {
PTF_INSTALLLAYOUTORTIP pfnInstallLayoutOrTip;
pfnInstallLayoutOrTip =
(PTF_INSTALLLAYOUTORTIP)GetProcAddress(hInputDLL, "InstallLayoutOrTip");
if (pfnInstallLayoutOrTip) {
(*pfnInstallLayoutOrTip)(PSZTITLE_HANS, ILOT_UNINSTALL);
(*pfnInstallLayoutOrTip)(PSZTITLE_HANT, ILOT_UNINSTALL);
}
FreeLibrary(hInputDLL);
}
还有一个问题就是如果用户还有其它输入法,删除小狼毫会不会把其它输入法搞死? 这两行代码好象有些武断
(*pfnInstallLayoutOrTip)(PSZTITLE_HANS, ILOT_UNINSTALL);
(*pfnInstallLayoutOrTip)(PSZTITLE_HANT, ILOT_UNINSTALL);
还有一个问题就是如果用户还有其它输入法,删除小狼毫会不会把其它输入法搞死? 这两行代码好象有些武断
(*pfnInstallLayoutOrTip)(PSZTITLE_HANS, ILOT_UNINSTALL); (*pfnInstallLayoutOrTip)(PSZTITLE_HANT, ILOT_UNINSTALL);
看看PSZTITLE_HANS,及边上的注释,有要求的。
只是删除这个确实应该检查一下有无
ILOT_UNINSTALL 变成了安装, 成功的踩到了Windows的Bug?
上报前请检查
操作系统信息
描述遇到的问题 操作系统为Windows10 英文版。 WeaselSetup.exe /s 会触发安装 Chinese (Traditional, Taiwan), 尽管我的选项是简体中文。
下面代码中,只要不是简中的lcid(2052, 3072, 4100), 就都默认是繁体中文。我觉得应该检查参数 是 /s 还是 /t 而不是使用GetUserDefaultLCID()
复现步骤 重现问题的步骤,如:
预期行为 WeaselSetup.exe /s 应该安装Chinese (Simplified, China) 而不是 Chinese (Traditional, Taiwan)
截图
其他补充说明 发现3处使用GetUserDefaultLCID(), 不是那几个指定的语言标识,肯定会出错。