在 C# 中以编程方式设置 Windows XP Embedded 区域设置

Posted

技术标签:

【中文标题】在 C# 中以编程方式设置 Windows XP Embedded 区域设置【英文标题】:Setting Windows XP Embedded locale programmatically in C# 【发布时间】:2015-03-14 11:25:43 【问题描述】:

有没有办法通过 C# Windows 窗体应用程序在 Windows XP Embedded 中以编程方式设置系统区域设置(可能使用简码,例如 en-US)?

最好这是一个组合框选择器,它允许用户从与 intl.cpl 类似/相同的可用区域格式列表中进行选择。这需要在无权访问 intl.cpl 的非管理员帐户上运行(我将以管理方式提升应用程序)。

【问题讨论】:

你看过Culture.Info 这只会改变应用程序的文化/区域设置,而不是我认为的系统区域设置? 所以你是说这不会像这样System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US"); 这只会更改应用程序的线程,不会更改 SYSTEM 区域设置。我要问的可能需要更新注册表,以便它设置 SYSTEM 区域设置,而不是应用程序 CultureUI。 为什么你需要知道我为什么需要这样做?一个更好的为什么问题是......“为什么仅仅因为你不理解一个非常清楚并且在 10 分钟内得到所需答案的问题就投反对票?” 【参考方案1】:

您需要使用 API。检查这个:

[DllImport("kernel32.dll")]
static extern bool SetLocaleInfo(uint Locale, uint LCType, string lpLCData);

使用kernel32.dll 的这个函数,您将能够设置系统的区域设置。

第一个参数指定函数在解释lpLCData的数据时将使用什么语言环境。

第二个参数指定您正在设置的区域设置类型(日期格式、月份名称、日期名称、货币格式等)

第三个参数指定您要设置的格式。它必须与您在第二个参数中指定的类型兼容。

您可以查看MSDN page 了解更多信息。

请注意,正如你所说,这会修改整个系统的注册表,所以要非常小心并确定你为什么要这样做。

【讨论】:

我认为应用程序不应该使用这个 api。 msdn.microsoft.com/en-us/library/windows/desktop/… 我提供给 MSDN 页面的链接状态相同。实际上我也不认为有人应该使用这个 API。我刚刚回答了这个问题,但也澄清了这是一件非常危险(且不常见)的事情。

以上是关于在 C# 中以编程方式设置 Windows XP Embedded 区域设置的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中以编程方式安装 Windows 服务?

如何在 C# 中以编程方式将 Windows 服务的启动类型更改为禁用

在 Windows 中以编程方式设置正在“收听”的音频设备

有没有办法在 Windows 上的 C++ 中以编程方式设置环境路径?

如果应用程序具有应用程序清单,如何在 C# 中以编程方式获取?

在 C# 中以编程方式创建 WCF 客户端的标头(wsse)部分