6

谁能建议如何以编程方式更改默认的 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 (Chinese PRC) 无济于事。

我不想更改“语言环境”本身,因为这也会更改时间/日期设置、分隔符等。

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

谢谢!

邓肯

4

1 回答 1

9

唯一合适的情况是,如果您正在编写一个不会在系统上运行其他任何东西的信息亭类型的应用程序。该更改将影响系统上的所有其他应用程序。

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

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

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

于 2010-06-09T17:59:13.353 回答