Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以编程方式更改Windows中的“区域格式”(C)_C#_.net_Windows_Regional Settings - Fatal编程技术网

C# 以编程方式更改Windows中的“区域格式”(C)

C# 以编程方式更改Windows中的“区域格式”(C),c#,.net,windows,regional-settings,C#,.net,Windows,Regional Settings,在Windows中,如果单击“其他设置”,您可以在该窗口中设置日期、时间和货币的格式 您如何通过编程更改此设置 我已经找到了告诉我使用CultureInfo类设置它的链接。这不是一个好的解决方案,因为这只会为一个应用程序而不是整个系统设置它 我找到了指向HKCurrentUser\ControlPanel\Internalional的有希望的链接,在那里我可以看到许多这些设置,但从我所读到的内容来看,更改注册表中的设置需要重新启动计算机。直接在下面的窗口屏幕截图中设置值不需要重新启动 当我在下面

在Windows中,如果单击“其他设置”,您可以在该窗口中设置日期、时间和货币的格式

您如何通过编程更改此设置

我已经找到了告诉我使用CultureInfo类设置它的链接。这不是一个好的解决方案,因为这只会为一个应用程序而不是整个系统设置它

我找到了指向HKCurrentUser\ControlPanel\Internalional的有希望的链接,在那里我可以看到许多这些设置,但从我所读到的内容来看,更改注册表中的设置需要重新启动计算机。直接在下面的窗口屏幕截图中设置值不需要重新启动

当我在下面的窗口截图中进行实际更新时,我可以看到注册表中的大多数值都发生了更改。如果我要以编程的方式这样做,那么当我只从组合框中选择一个项目时,需要更改所有项目似乎有点过分了

当然还有更好的方法,即Windows API调用,它也可以让我处理其他设置


在powershell 3中,引入了Get-Culture和Set-Culture cmdlet。我肯定,它从Win8开始工作,我不确定Win7和Vista。 在powershell中,您可以更改用户区域设置,如下所示:

$culture = Get-Culture
$culture.DateTimeFormat.ShortDatePattern = 'yyyy-MM-dd'
$culture.DateTimeFormat.LongDatePattern = 'dddd, d MMMM, yyyy'
$culture.DateTimeFormat.ShortTimePattern = 'h:mm tt'
$culture.DateTimeFormat.LongTimePattern = 'h:mm:ss tt'
$culture.NumberFormat.CurrencyDecimalSeparator = ":"
Set-Culture $culture
您可以通过执行$culture | get member找到其他选项, $culture.DateTimeFormat |获取成员, $culture.NumberFormat |获取成员


您可以非常轻松地在c应用程序中托管powershell脚本

[kernel32.dll]的OEM安装生成器NlsUpdateSystemLocale部分有一个未记录的API。我怀疑它是否在.Net framework中公开,因为它对系统来说太原生了。你可以看看。我从C程序中使用过它,它的行为就像你文章中的对话框。我可以问一下您的用例吗?我怀疑您是否会找到一种很好的方法来实现这一点,因为它是为用户而不是应用程序设置的。应用程序应避免更改系统的全局用户配置。当然,没有人能阻止你对窗口进行反向工程,做同样的事情——它不是一个私有的应用程序,但你将不得不执行丑陋的P/调用,并确保它在每个版本的Windows中都能工作,因为它不是一个公开的、有文档记录的API。我假设您这样做是为了解决损坏的应用程序,但一般来说,这与您的应用程序无关。@I.net我的使用案例是,我们有一套应用程序可以替代Windows。与直接在每个应用程序中设置datetime/currency格式不同,我们发现在Windows中设置正确的格式可以使所有应用程序正常工作。因此,如果我们的安装应用程序可以更改Windows设置,这将为我们节省大量的工作,而不必调整每个应用程序。我明天肯定会研究这个API…而不是在每个应用程序中直接设置日期时间/货币格式。。。您不能为用户更改它,以便用户调用的所有应用程序都使用新的格式吗?@i.net是的,这就是我要做的。这就是在Windows中更改设置所做的。