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

Dun*_*can 6 delphi localization codepages

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

在这种情况下,我想切换到中文(PRC),所以写入以下注册表字符串:HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage\ACP = 936 MACCP = 10008 OEMCP = 936

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

我也试过设置HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language\Default = 0804(中华人民共和国)无济于事.

我不想更改"区域设置"本身,因为这也会更改时间/日期设置,分隔符等.

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

谢谢!

邓肯

Zoë*_*son 8

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

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

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

最后,您可以使用Microsoft的AppLocale实用程序来更改仅适用于您的应用程序的ANSI代码页.有从一个批处理脚本中调用它的细节在这里,一个补丁没有唠叨屏幕运行它在这里,并命名为命令行克隆SBAppLocale.它有效,但它是一个黑客,其他选项是更好的长期.