2017-03-27 1 views
-1

In Windows haben Sie dieses Fenster, wo Sie einstellen können, welches Format Sie an Ihrem Datum und Uhrzeit (und Währungen, wenn Sie auf "Zusätzliche Einstellungen" klicken).Programm "Regionalformat" programatically (C#) ändern

Wie ändern Sie dies programmatisch?

Ich habe bereits Links gefunden, die mir sagen, dass ich es mit den Klassen CultureInfo einstellen soll. Dies ist keine gute Lösung, da dies nur für eine Anwendung und nicht für das gesamte System gilt.

Ich habe vielversprechende Links gefunden, die auf HKCurrentUser\ControlPanel\Internaltional zeigen, wo ich viele dieser Einstellungen sehen kann, aber von dem, was ich gelesen habe, erfordert das Ändern der Einstellungen in der Registrierung einen Neustart des Computers. Wenn Sie die Werte direkt im folgenden Bildschirm-Screenshot festlegen, ist not ein Neustart erforderlich.

Wenn ich eine tatsächliche Aktualisierung im Fenster Screenshot unten mache, kann ich sehen, dass sich die meisten Werte in der Registrierung ändern. Wenn ich das programmatisch machen soll, scheint es ein bisschen übertrieben zu sein, alle zu ändern, wenn ich nur einen Gegenstand aus der Combobox auswähle.

Sicher gibt es einen besseren Weg, d. H. Windows-API-Anrufe (die auch mich die "zusätzlichen Einstellungen" behandeln)?

Region format window

+0

Es gibt eine undokumentierte API, die für den OEM-Installationsersteller NlsUpdateSystemLocale() Teil von [kernel32.dll] verfügbar ist. Ich bezweifle, dass es in .Net Framework ausgesetzt ist, da es zu systemeigen ist. Du kannst es anschauen. Ich habe es aus C-Programmen verwendet und es verhält sich wie der Dialog in Ihrem Beitrag. Kann ich Ihren Anwendungsfall fragen? –

+0

Ich bezweifle, dass Sie eine gute Möglichkeit finden, dies zu tun, da es eine Einstellung für den Benutzer ist, keine Anwendungen. Anwendungen sollten vermeiden, die globale Benutzerkonfiguration des Systems zu ändern. Natürlich kann noöne Sie daran hindern, das Fenster zu re-engineeren und dasselbe zu tun (es ist keine privilegierte Anwendung), aber Sie werden hässliche P/Invokes machen müssen und sicherstellen, dass es in jeder Version von Windows funktioniert (da es keine öffentliche, dokumentierte API ist). Ich nehme an, Sie tun dies, um kaputte Anwendungen zu umgehen, aber im Allgemeinen geht es nicht um Ihre Anwendung. – Luaan

+0

@ i.net Mein Anwendungsfall ist, dass wir eine Reihe von Anwendungen haben, die Windows "ersetzen". Anstatt die Datetime/Currency-Formate direkt in jeder Anwendung zu setzen, haben wir festgestellt, dass das Setzen der richtigen Formate in Windows alle unsere Anwendungen zum Laufen bringt. Wenn unsere Setup-Anwendung die Windows-Einstellungen ändern könnte, würde es uns viel Arbeit ersparen, nicht jede Anwendung anpassen zu müssen. Ich werde auf jeden Fall morgen in diese API schauen. – GTHvidsten

Antwort

0

In Powershell 3 wurde Get-Kultur eingeführt und Set-Kultur-Cmdlets. Ich bin sicher, es funktioniert ab Win 8, ich bin mir nicht sicher über Win 7 und Vista. In Powershell können Sie Benutzer regionale Einstellungen wie folgt ändern:

$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 

Sie andere Optionen durch Ausführen $ Kultur finden | get-member, $ culture.DateTimeFormat | Get-Member, $ culture.NumberFormat | Get-Member

Sie können sehr einfach Host Powershell-Skript in Ihrer C# -Anwendung. https://msdn.microsoft.com/en-us/library/ee706563(v=vs.85).aspx