以编程方式更改“区域和语言”操作系统设置

我希望能够从C#程序更改操作系统(Windows 7)的区域和语言设置。 我并不反对执行命令行命令,但我只是发现如何启动区域和语言对话框: control /name Microsoft.RegionAndLanguage

这是一个语言本地化问题,其中ControlDateTimePicker只能使用Windows 区域和语言设置(详见此处); 但是,更新操作系统以符合应用程序的语言设置不仅限于此,而且最终是期望的目标。

建议和/或解决方法将不胜感激。

我设法实现的唯一解决方案是修改注册表。 在Windows 7中,当语言更改时,子项中的注册表中将添加一个新条目: HKEY_CURRENT_USER\Control Panel\Desktop 。 此键将包含REG_MULTI_SZ类型的条目PreferredUILanguagesPending ,其值将确定UI语言。 要应用更改,当前用户需要注销并再次登录。 这可以使用以下代码完成:

 RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true); string[] lang = {"en-ZA"}; key.SetValue("PreferredUILanguagesPending", lang, RegistryValueKind.MultiString); 

语言包需要先安装才能设置。 有关语言包的列表,请在此处或此处查看 。 如果安装了多个语言包,则更改UI语言的选项将显示在“ Control Panel > Region and Language > Keyboards and Languages > Display language

听起来好像改变应用程序的Culture / UICulture应该足够了

例如

 Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE"); 

我找到了DateTimePicker一个很好的替代品: http : //www.visualhint.com/fieldpackeditor

您将遇到与OpenFileDialogPrintDialog等所有系统控件和系统对话框相同的问题,它们在.NET中无法本地化。

但想一想,为什么要改变应用程序的文化? 用户可以使用控制面板自行更改其区域和语言设置,为什么您的应用程序会覆盖这些设置?

我想,你正在思考你需要的东西。 应用程序通常需要帮助/尊重/满足用户操作系统设置,而不是为了方便应用程序而更改它们。 查看与您的问题类似的post: 如何更改Windows用户的区域设置/日期格式?

这是一个语言本地化问题,其中像DateTimePicker这样的控件只能使用Windows>区域和语言设置

坚果。 认真。 想想你在这里做了什么; 我启动你的程序,你重新配置我的整个计算机,使一个小的UI元素工作? 最好不要求或告诉我?

有法律禁止 – 这可以被视为未经授权操纵计算机。

使用适当的控制并正确编程; 但不要在那个级别上进行破坏。