Entwickler-Ecke

Sonstiges (.NET) - Sprachoptionen von Windows ändern


tfsonic - Do 29.07.10 15:57
Titel: Sprachoptionen von Windows ändern
Guten Tag,

habe ewig gesucht aber nichts gefunden und zwar möchte in C# per SourceCode die Regions- und Sprachoptionen in der Systemsteuerung ändern. Mit CultureInfo klappt es leider nicht.

Vielen Dank für jeder Hilfe.

Gruß
Timo


Ralf Jansen - Do 29.07.10 16:18

Soweit ich weiß gibt es dafür keine Funktionalität im .NET Framework. Musst du wohl per PInvoke über die SetLocaleInfo [http://msdn.microsoft.com/de-de/library/aa913806%28en-us%29.aspx] API erledigen.


tfsonic - Do 29.07.10 17:21

Alles klar danke.


tfsonic - Fr 30.07.10 12:31

Hallo,

leider bekomme ich es nicht ganz hin, ich bekomme immer ein false zurück weiß aber nicht warum. Bräuchte nochmal hilfe. Mein Code sieht bis jetzt so aus


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
[DllImport("kernel32.dll", SetLastError = true)]


        static extern bool SetLocaleInfo(int LOCALE_SYSTEM_DEFAULT, int LOCALE_SSHORTDATE, string lpLCData);

        public const int LOCALE_STIMEFORMAT = 0x1003;

        public const int LOCALE_SYSTEM_DEFAULT = 0x800;

        public const int LOCAL_SSHORTDATE = 0x31;

        bool test = SetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCAL_SSHORTDATE, "yyyy-MM-dd");


danke

Moderiert von user profile iconKha: C#-Tags hinzugefügt


Ralf Jansen - Fr 30.07.10 13:10

Ich vermute LOCAL_SSHORTDATE sollte decimal 31 sein nicht Hex. Also 0x1F.


tfsonic - Mo 02.08.10 08:14

Danke erstmal funktioniert jetzt, aber ich bekomme es einfach nicht hin das sich die Sprache in der Systemsteuerung unter Regionaleoptionen ändert. Weiß nicht mehr weiter, wäre nett wenn jemand ein Tipp hätte.

Danke


tfsonic - Mo 02.08.10 11:16

Bin jetzt ein etwas anderen Weg gegangen und zwar ändere ich jetzt die Werte direkt in der Windows Registrierung was auch alles gut klappt. Allerdings gibt es noch ein Problem.

Dazu hoffe ich das jemand weiß, wie man Windows dazu bekommt die Einträge in der Registrierung neu einzulesen. Denn wenn ich mich ab- und wieder anmelde sind die Änderungen in der Registrierung von Windows übernommen worden.

Habe es mit dieser WindowsAPI Funktion versucht, die auch ohne Fehlermeldung durchläuft aber leider keinen gewünschten Effekt liefert.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool
            SendMessageTimeout(IntPtr hWnd, int Msg, int wParam, string lParam, int fuFlags, int uTimeout, out int lpdwResult);

        public const int HWND_BROADCAST = 0xffff;
        public const int WM_SETTINGCHANGE = 0x001A;
        public const int SMTO_NORMAL = 0x0000;
        public const int SMTO_BLOCK = 0x0001;
        public const int SMTO_ABORTIFHUNG = 0x0002;
        public const int SMTO_NOTIMEOUTIFNOTHUNG = 0x0008;


Danke schon einmal im Vorraus.

Moderiert von user profile iconKha: C#-Tags hinzugefügt