以编程方式更改Windows XP中的默认代码页? (来自德尔福)

时间:2010-06-09 16:14:50

标签: delphi localization codepages

有没有人可以建议如何以编程方式更改默认的Windows XP代码页(我是从Delphi这样做的)? (这相当于进入控制面板 - >区域设置 - >非Unicode应用程序的语言)。

在这种情况下,我想切换到中文(PRC),因此写入以下注册表字符串: HKLM \系统\ CurrentControlSet \控制\ NLS \代码页\ ACP = 936 MACCP = 10008 OEMCP = 936

(这正是在控制面板中更改非Unicode代码页下拉的原因)。必须有另一个我需要更改的设置 - 我更喜欢使用Win API调用(如果可用),而不是自己写入注册表。

我也尝试过设置 HKLM \系统\ CurrentControlSet \控制\ NLS \语言\ 默认= 0804(中华人民共和国)无济于事。

我不想更改'locale'本身,因为这也会更改时间/日期设置,分隔符等等。

这是因为我正在使用需要渲染中文字符的ANSI应用程序,而我正在编写一个工具来自动切换系统显示字符(同时保留UI的其他方面)。

谢谢!

邓肯

1 个答案:

答案 0 :(得分:8)

这是合适的唯一一次,如果您正在编写一个自助服务终端类型的应用程序,系统上不会运行任何其他内容。该更改将影响系统上的所有其他应用程序。

如果您只需要渲染字符并将它们放入WideString中,您可以通过直接调用Windows API的 W 版本在旧版本的Delphi中渲染它们,而不是通过TCanvas方法。也就是说,调用DrawTextWExtTextOutW而不是TCanvas.TextOut,它会绘制Unicode字符,而不会将它们转换为系统的ANSI代码页。

更完整的选项是TMS Unicode Component Pack。它支持在Delphi 6-2007中创建支持Unicode的应用程序,并为您处理所有 W 函数。它运行良好,您可以像平常一样使用TCanvas或Caption / Text属性。唯一的区别是属性都是WideStrings而不是。这最初是TNT Unicode控件包,并且有一个较旧的,不受支持的版本可用here

最后,您可以使用Microsoft的AppLocale实用程序来更改仅适用于您的应用程序的ANSI代码页。有关从批处理脚本here调用它的详细信息,在没有nag屏幕here的情况下运行它的补丁,以及名为SBAppLocale的命令行克隆。它有效,但它是一个黑客,其他选择是更好的长期。