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

标签 delphi localization codepages

有人可以建议如何以编程方式更改默认的 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 方法。也就是说,调用 DrawTextWExtTextOutW 而不是 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/

相关文章:

linux - MS Access *.MDB 转换为 MySQL 或 SQLite,数据编码问题

delphi - 为什么在 Delphi 2010 中将 SSl 添加到 Indy 邮政编码查找示例时得到 "wrong version error"?

ios - 阿拉伯语本地化改变了方向

c - 为什么 setlocale 给我?而不是普通的字母?

c++ - 错误 RC2255 : named STRINGTABLEs are not allowed - occurs when generating a Japanese RES file

asp.net-mvc-3 - MVC3显示日期+短时间无格式字符串

json - 从 Inno Setup 中的 JSON 文件的每个对象中读取特定字符串

delphi - Firebird 2.5 中的 Windows 身份验证

delphi - 处理指向复杂记录的指针

ios - 如何本地化静态 UITableView 部分?