2017-09-14 5 views
1

Ich verwende Windows 10. Wenn ich "Region & Spracheinstellungen" im Startmenü öffne, kann ich ein "Land oder eine Region" auswählen. Ich versuche, diesen Wert in einem C# -Programm zu erhalten.In C#, wie wird das "Land oder die Region" in Windows 10 unter "Region & Sprache" ausgewählt?

Ich bin in Dänemark. Ich habe versucht, mein Land nach Deutschland zu wechseln (siehe screenshot), aber ich kann meinen Code nicht bekommen, um Deutschland zurückzugeben. Neustart des Computers hat nicht geholfen.

Ich habe einen Code geschrieben von this thread inspiriert.

Mein Code sieht wie folgt aus (verschiedene Dinge auf einmal versuchen, immer alle Region/Kultur Dinge, die ich mir vorstellen kann):

private static void Main(string[] args) 
{ 
    Thread.CurrentThread.CurrentCulture.ClearCachedData(); 
    Thread.CurrentThread.CurrentUICulture.ClearCachedData(); 
    var thread = new Thread(() => ((Action) (() => 
    { 
     Console.WriteLine("Current culture: {0}", Thread.CurrentThread.CurrentCulture.Name); 
     Console.WriteLine("Current UI culture: {0}", Thread.CurrentThread.CurrentUICulture.Name); 
     Console.WriteLine("Installed UI culture: {0}", CultureInfo.InstalledUICulture.Name); 
     Console.WriteLine("Current region: {0}", RegionInfo.CurrentRegion.ThreeLetterISORegionName); 
     Console.WriteLine("System default LCID: {0}", GetSystemDefaultLCID()); 
    }))()); 
    thread.Start(); 
    thread.Join(); 
    Console.ReadKey(); 
} 

[DllImport("kernel32.dll")] 
private static extern uint GetSystemDefaultLCID(); 

Es gibt:

Current culture: en-DK 
Current UI culture: en-US 
Installed UI culture: en-US 
Current region: DNK 
System default LCID: 1033 

Wie kann ich mein Programm zu erkennen, dass ich Deutschland ausgewählt habe? Welche Methode oder Eigenschaft muss ich anrufen? Und welche Neustarts oder Cache-Clearing könnte notwendig sein?

+2

[RegionInfo.CurrentRegion] (https://msdn.microsoft.com/en-us/library/system.globalization.regioninfo. aktuelle Region (v = vs.110) .aspx). Zeit für ein Upgrade Ihres Google-Fu. –

+0

Es gibt eine "Administrative" Registerkarte in der Region-Systemsteuerung [Win32], nicht die Modern-Einstellungen. Klicken Sie auf "Einstellungen kopieren" & "Gebietsschema ändern". Wahrscheinlich könnte Ihre Frage lösen –

+0

Ich habe endlich die Antwort auf meine Frage in diesem Thread gefunden: https://stackoverflow.com/questions/8879259/get-current-location-as-specified-in-region-and-language-in- c-sharp –

Antwort

2

ich die Antwort auf meine Frage in this thread gefunden.

Ich verwende den folgenden Code, wie von @SanjaySingh in diesem Thread vorgeschlagen und nur geringfügig geändert.

Wenn ich GetMachineCurrentLocation mit dem geoFriendlyname Parametersatz 5 nennen, erhalte ich den drei Buchstaben bestehenden ISO-Ländercode ich will (für Deutschland ist dies "DEU"). Die Werte für geoFriendlyname können here gefunden werden. Versuchen

public static class RegionAndLanguageHelper 
{ 
    #region Constants 

    private const int GEO_FRIENDLYNAME = 8; 

    #endregion 

    #region Private Enums 

    private enum GeoClass : int 
    { 
     Nation = 16, 
     Region = 14, 
    }; 

    #endregion 

    #region Win32 Declarations 

    [DllImport("kernel32.dll", ExactSpelling = true, CallingConvention = CallingConvention.StdCall, SetLastError = true)] 
    private static extern int GetUserGeoID(GeoClass geoClass); 

    [DllImport("kernel32.dll")] 
    private static extern int GetUserDefaultLCID(); 

    [DllImport("kernel32.dll")] 
    private static extern int GetGeoInfo(int geoid, int geoType, StringBuilder lpGeoData, int cchData, int langid); 

    #endregion 

    #region Public Methods 

    /// <summary> 
    /// Returns machine current location as specified in Region and Language settings. 
    /// </summary> 
    /// <param name="geoFriendlyname"></param> 
    public static string GetMachineCurrentLocation(int geoFriendlyname) 
    { 
     int geoId = GetUserGeoID(GeoClass.Nation); ; 
     int lcid = GetUserDefaultLCID(); 
     StringBuilder locationBuffer = new StringBuilder(100); 
     GetGeoInfo(geoId, geoFriendlyname, locationBuffer, locationBuffer.Capacity, lcid); 

     return locationBuffer.ToString().Trim(); 
    } 

    #endregion 
} 
+0

Kannst du mir zeigen, was du an 'GetMachineCurrentLocation (?)' Weitergegeben hast und was hast du vom Aufruf der 'GetMachineCurrentLocation()' Methode bekommen? –

+0

In meinem Fall: 'var test = RegionAndLanguageHelper.GetMachineCurrentLocation (RegionInfo.CurrentRegion.GeoId);' => 'test' ist" "(leer) –

0

Read msdn documentation: RegionInfo Properties

var regionInfo = RegionInfo.CurrentRegion; 
var name = regionInfo.Name; 
var englishName = regionInfo.EnglishName; 
var displayName = regionInfo.DisplayName; 

Console.WriteLine("Name: {0}", name); 
Console.WriteLine("EnglishName: {0}", englishName); 
Console.WriteLine("DisplayName: {0}", displayName); 

Name: DE
EnglishName: Deutschland
Display: Deutschland

+0

Ich habe das versucht, wie in meinem ursprünglichen Beitrag angegeben. Es hat nicht geholfen. CurrentThread.CurrentCulture hat sich nicht geändert, als ich mein Land in "Region & Spracheinstellungen" geändert habe. –

+0

@ClausAppel Haben Sie versucht mit 'var regionInfo = RegionInfo.CurrentRegion;'? für mich arbeiten. –

+0

@ClausAppel, von msdn: * "Die RegionInfo-Klasse erkennt nicht automatisch Änderungen an den Systemeinstellungen, sondern die [CurrentRegion] (https://msdn.microsoft.com/en-us/library/system.globalization.regioninfo. Die Eigenschaft currentregion (v = vs.110) .aspx) wird aktualisiert, wenn Sie [ClearCachedData] (https://msdn.microsoft.com/de-de/library/system.globalization.cultureinfo.clearcacheddata (v = vs. 110) .aspx) Methode "*. – Sinatr

0

var geographicRegion = new Windows.Globalization.GeographicRegion(); 
    var code = geographicRegion.CodeTwoLetter; 

oder

var region = Windows.System.UserProfile.GlobalizationPreferences.HomeGeographicRegion; 
+1

Dies ist UWP-Lösung. – Sinatr

Verwandte Themen