Wie kann ich programmgesteuert auf die Region eines Windows-Computers zugreifen?

607
dvlsg

Wie kann ich programmgesteuert auf die Region eines Windows-Computers zugreifen?

Ich suche diesen Wert insbesondere im Bereich "Region & Language" in Windows 10.

Windows 10 Region

Oder (alternativ) die "Heimatposition" in der Systemsteuerung -> Region -> Registerkarte "Standort".

Windows Control Panel Location

Ich hoffe, etwas zu finden, das für Windows 7-10 funktioniert. Auch unter Hinweis darauf, dass das ausgewählte Standardsprache ist Englisch (USA). Ich habe sowohl das Abmelden als auch das Neustarten meines Computers versucht, um die Änderungen zu übernehmen. Ich habe die folgenden Befehle (von Powershell) aus versucht:

wmic os get locale // 0409 -> Translates to United States // This one is especially problematic -  // it doesn't seem to change // when I change my default language.  Get-Culture // 1033 -> English (United States)  Get-UICulture // 1033 -> English (United States) 

Ich würde es vorziehen, wenn nicht möglich, sich auf die gewählte Sprache des Betriebssystems zu verlassen. Eine nicht-Powershell-Lösung wäre auch großartig, da ich nicht sicher bin, dass ich mich darauf verlassen kann, dass Powershell-Skripts auf den Computern des Endbenutzers ausgeführt werden können.


Edit: Diese Antwort auf Stack Overflow funktioniert für mich und meldet "Canada"wie erwartet (oder "CA", wenn ich einen GeoType von 4 verwende, was ich eigentlich hinterher habe). Ich benutze nicht C Sharp (oder irgendetwas, mit dem man kernel32.dlldirekt eine Schnittstelle herstellen könnte ). Wenn also jemand weiß, wo er diese Informationen woanders bekommt, wäre er trotzdem sehr dankbar. Aber ich kann eine .NET-Core-Anwendung schreiben, die es mir bietet, wenn ich muss.

4

3 Antworten auf die Frage

3
DavidPostill

Wie erhalte ich den Windows-Standort?

Verwenden Get-WinHomeLocation:

Das Get-Cmdlet WinHomeLocationruft den Wert der GeoID-Einstellung des Benutzers ab und gibt ein .NET- GeoIDObjekt zurück. Die Windows-GeoID-Einstellung ist eine Benutzereinstellung, die den Heimatort des aktuellen Benutzerkontos beschreibt. Heimatort ist das Land oder die Region. Anwendungen, die den Heimatstandort des aktuellen Benutzerkontos erfordern, z. B. einen Treiber für eine TV-Tuner-Anwendung, können diese Einstellung verwenden.

Eine Tabelle mit GeoIDs finden Sie unter Tabelle der geografischen Standorte .

Beispiele

Beispiel 1: Zeigen Sie die GeoID für das aktuelle Konto an

PS C:\> Get-WinHomeLocation HomeLocation Description ---- ----------- 244 United States 

Dieser Befehl gibt die GeoID-Einstellung und ihren Anzeigenamen für das aktuelle Benutzerkonto zurück.

Source Get-WinHomeLocation

Danke, das sieht sehr hilfreich aus. Dies ist die Lösung, die ich erreichen möchte, wenn ich Powershell verwenden kann. dvlsg vor 6 Jahren 0
1
K7AAY
systeminfo | findstr “Locale” | find "System" | cut -f2 -d( | sed s/)//g 

stützt sich auf die GNU-Text-Dienstprogramme cutund sedda Windows nicht über die Textfilter-Fähigkeit verfügt, die sofort erforderlich ist. Ihre Win32-Binärdateien können von http://gnuwin32.sourceforge.net/packages/coreutils.htm heruntergeladen und in den Pfad der Maschine oder in das Verzeichnis kopiert werden, in dem Sie den Befehl ausführen.

systeminfo ist ein Teil von Windows, der Informationen über Ihre Konfiguration und Hardware extrahiert. Wir nehmen seine Ausgabe und filtern sie mit findstr, einer anderen ausführbaren Datei von Window, um nur die Zeilen mit "locale" anzuzeigen. Dann verwenden Sie find und noch eine weitere ausführbare Windows-Datei, um die verbleibenden Zeilen so zu filtern, dass nur die mit "System" eingeschlossenen angezeigt werden . Dann verwenden wir cut, um alles bis einschließlich "(") wegzuwerfen, und sed beendet den Job, indem er die nahe stehenden Klammern ")" wegwirft.

Es ist nicht Powershell, und obwohl es von zwei ausländischen Binärdateien abhängt, sind sie gutartig und klein (39 KB und 79 KB).

Vielen Dank für die Antwort. Ich bekomme tatsächlich "en-us; Englisch (USA)" wurde sowohl für "System Locale" als auch für "Input Locale" gemeldet, sodass es so aussieht, als könnte dies immer noch der Sprache entsprechen. dvlsg vor 6 Jahren 0
Ja. Ich hatte eigentlich schon coreutils auf meinem Rechner. Die genaue Ausgabe der gesamten Befehlspipe lautet "USA". dvlsg vor 6 Jahren 0
Das ist die Region, was Sie wollten, richtig? K7AAY vor 6 Jahren 0
Es ist, aber es wird "Vereinigte Staaten" gemeldet, wenn meine Maschine auf "Kanada" eingestellt ist. Ich vermute, es zieht die Vereinigten Staaten von meiner ausgewählten Standardsprache _language_ (was tatsächlich "en-US" ist). Ich war nur neugierig, ob es einen Weg gibt, die ausgewählte Region in den obigen Screenshots zu finden. Es sieht so aus, als ob es eine Möglichkeit gibt, die Schnittstelle mit `kernel32.dll` aufzurufen, aber ich habe in der Anwendung, die ich verwende, keinen Zugriff darauf, eine separate .exe zu schreiben und damit zu arbeiten. dvlsg vor 6 Jahren 0
1
root

Die Windows - Region Einstellung wird pro Benutzer gespeichert werden, in der Registry hier: HKEY_CURRENT_USER:\Control Panel\International\Geo\. Wenn Sie Powershell verwendet haben, um diesen Wert abzurufen, können Sie dies mit folgendem tun:

gp 'HKCU:\Control Panel\International\Geo\' | select -exp Name 

Beispiel für US:

Region CA Region CA PS

Beispiel für CA:

Region US Region US PS

Perfekt, danke. Ich werde dieses als die Antwort markieren, da es wahrscheinlich das ist, was ich am Ende verwenden werde (immer noch nicht sicher, ob ich mich darauf verlassen kann, auf Powershell-Skripts auf den Computern der Endbenutzer zugreifen zu können), aber Der "Get-WinHomeLocation" sieht ebenfalls sehr hilfreich aus. dvlsg vor 6 Jahren 0