2009-06-18 3 views
3

Ich verwende eine VB6/COM + -Anwendung, die Datum/Uhrzeit-Werte auf der Grundlage der kurzen Datumseinstellungen in der Systemsteuerung, Ländereinstellungen, für den Benutzer ausgibt, der es ausführt. Das Programm, das diese Ausgabe analysiert, verfügt über eine konfigurierbare Einstellung für das erwartete Datumsformat und wird in der Benutzeroberfläche angezeigt.Wie kann ich die regionalen Einstellungen/das Datumsformat eines Windows-Benutzers ändern?

z.B. Wenn die regionale Einstellung für den Benutzer auf mm/dd/yyyy festgelegt ist und am 18.06.2009 ausgegeben wird, schlägt die Anwendung, die "18/06/2009" erwartet, fehl mit "Zeichenfolge wurde nicht als gültige DateTime erkannt".

Da wir diese Anwendung normalerweise als Dienstkonto ausführen, für das wir uns nicht interaktiv angemeldet haben, um ein Profil zu erstellen, legen wir im Allgemeinen das korrekte Datumsformat fest und markieren dann "Alle Einstellungen auf das aktuelle Benutzerkonto anwenden Standardbenutzerprofil "Option.

Ich möchte das C# -Konfigurationsprogramm machen, das ich für dieses Chaos geschrieben habe, um das Datumsformat programmatisch für einen gegebenen Benutzer einstellen zu können.

bearbeiten ich nichts würde gerne mehr als den Code zu ändern, haben aber nicht die Möglichkeit, so zu diesem Zeitpunkt zu tun.

Ich weiß auch, dass das, was ich frage, eine schlechte Sache ist zu tun. In Bezug auf "es sollte die Wahl des Benutzers sein" - ich bin dieser Benutzer, wie ich es explizit für die Aufgabe erstellen; Ich möchte nur das Datumsformat durch eine Skriptmethode festlegen, anstatt das Klicken selbst zu tun.

+0

Ich verstehe. Ich habe Registrierungsschlüssel zu meiner Antwort unten hinzugefügt. – Stu

Antwort

14

Dies wird von Microsoft ausdrücklich abgeraten. Jede Lösung, die Sie sich vorstellen können, wird ein schmutziger Hack sein, der wahrscheinlich bald nicht mehr funktioniert.

Denken Sie es auf diese Weise: Wer sind Sie, um diese Einstellungen zu entscheiden? Denkst du nicht, dass das die Entscheidung des Users ist?

Zurück zum Thema: Finden Sie ein eindeutiges Format für die Anwendungen in der Kommunikation, wie YYYYMMDD. Die Anwendung, die angezeigt wird, kann dann einfach die tatsächlichen Benutzereinstellungen respektieren, wie es sollte.

Aber, da Sie sie nicht ändern können, steckt nur in die Registrierung:

Aktuelle Benutzer:

HKEY_CURRENT_USER\Control Panel\International 

Spezifische Benutzer:

HKEY_USERS\(user SID)\Control Panel\International 

Standardbenutzer:

HKEY_USERS\.DEFAULT\Control Panel\International 

sShortDate ist wahrscheinlich wohl die, die Sie ändern wollen.

+0

Ich weiß, dass es eine schlechte Sache ist, zu tun. Ich bin dieser Benutzer, ich erstelle es explizit für die Aufgabe; Ich möchte nur das Datumsformat durch eine Skriptmethode festlegen, anstatt das Klicken selbst zu tun. Ich möchte nichts mehr als den Code ändern, aber nicht die Fähigkeit dazu haben. – crb

+0

Danke - Ich bin ziemlich zuversichtlich, dass Ihre Antwort funktioniert, aber so oder so, Ihre pragmatische Einstellung zu dem Problem verdient definitiv die rep. – crb

2

Wenn Sie das Profil an Ihre Bedürfnisse anpassen möchten, ignorieren Sie einfach die Profileinstellungen und codieren Sie das gewünschte Format in Ihrer App.

0

Code:

Imports System.Threading 
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US", False) 
Microsoft.Win32.Registry.SetValue("HKEY_CURRENT_USER\Control Panel\International", "sShortDate", "M/d/yyyy")