有人可以建议如何以编程方式更改默认的 Windows XP 代码页(我是在 Delphi 中这样做的)吗? (这相当于进入控制面板 -> 区域设置 -> 非 Unicode 应用程序的语言)。
在这种情况下,我想切换到中文(中国),因此正在写入以下注册表字符串: HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage\ ACP=936 MACCP=10008 OEMCP=936
(这正是更改控制面板中的非 Unicode 代码页下拉列表的作用)。我必须更改另一个设置 - 而且我更喜欢使用 Win API 调用(如果可用)而不是自己写入注册表。
我也尝试过设置 HKLM\SYSTEM\CurrentControlSet\Control\Nls\语言\ 默认=0804(中国大陆)无济于事。
我不想更改“区域设置”本身,因为这也会更改时间/日期设置、分隔符等。
这是因为我正在使用需要渲染中文字符的 ANSI 应用程序,并且我正在编写一个工具来自动切换系统显示字符(同时保持 UI 的其他方面完好无损)。
谢谢!
邓肯
最佳答案
唯一合适的情况是您正在编写一个信息亭类型的应用程序,系统上不会运行其他任何东西。该更改将影响系统上的所有其他应用程序。
如果您只需要渲染字符并将它们放入 WideString 中,您可以通过直接调用 Windows API 的 W 版本,在旧版本的 Delphi 中渲染它们,而不是通过TCanvas 方法。也就是说,调用 DrawTextW
或 ExtTextOutW
而不是 TCanvas.TextOut
,它将绘制 Unicode 字符,而不将它们转换为系统的 ANSI 代码页。
更完整的选项是 TMS Unicode Component Pack 。它支持在 Delphi 6-2007 中创建支持 Unicode 的应用程序,并为您处理调用所有 W 函数。它运行良好,您可以像平常一样使用 TCanvas 或标题/文本属性。唯一的区别是属性都是 WideStrings。这最初是 TNT Unicode 控件包,并且有一个较旧的、不受支持的版本可用 here .
最后,您可以使用微软的AppLocale用于更改您的应用程序的 ANSI 代码页的实用程序。有从批处理脚本调用它的详细信息 here ,一个在没有导航屏幕的情况下运行它的补丁here ,以及名为 SBAppLocale 的命令行克隆。它有效,但它是一个黑客,其他选项从长远来看更好。
关于delphi - 以编程方式更改 Windows XP 中的默认代码页? (来自德尔福),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3007703/