Как я могу программно получить доступ к региону компьютера Windows?

513
dvlsg

Как я могу программно получить доступ к региону компьютера Windows?

В частности, я ищу это значение на панели «Регион и язык» в Windows 10.

Windows 10 Region

Или (поочередно) «Домашнее местоположение» в Панели управления -> Регион -> вкладка Местоположение.

Windows Control Panel Location

Я надеюсь найти что-то, что будет работать для Windows 7-10. Также отмечу, что моим выбранным языком по умолчанию является английский (США). Я попытался выйти из системы и перезагрузить компьютер, чтобы применить любые изменения. Я пробовал следующие команды (от powershell):

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) 

Я бы предпочел не полагаться на выбранный язык операционной системы, если это вообще возможно. Было бы неплохо также решение без PowerShell, так как я не уверен, что могу полагаться на то, что сценарии PowerShell исполняются на компьютерах конечных пользователей.


Изменить: Этот ответ на переполнение стека работает для меня, и сообщает, "Canada"как ожидалось (или "CA", если я использую GeoType 4, что я на самом деле после). Я не использую C Sharp (или что-либо, с чем можно было бы kernel32.dllнапрямую взаимодействовать ), поэтому, если кто-нибудь знает, где взять эту информацию в другом месте, она все равно будет оценена. Но я могу написать приложение .NET Core, которое, если понадобится, заберет его у меня.

4

3 ответа на вопрос

3
DavidPostill

Как мне получить расположение окон дома?

Используйте Get-WinHomeLocation:

WinHomeLocationКомандлет Get получает значение пользовательского параметра GeoID и возвращает GeoIDобъект .NET . Параметр Windows GeoID - это параметр пользователя, который описывает домашнее местоположение текущей учетной записи пользователя. Местом расположения является страна или регион. Приложения, которым требуется домашнее местоположение текущей учетной записи пользователя, например драйвер для приложения телевизионного тюнера, могут использовать этот параметр.

Для таблицы GeoID см. Таблица географических местоположений .

Примеры

Пример 1. Отображение GeoID для текущей учетной записи

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

Эта команда возвращает параметр GeoID и его отображаемое имя для текущей учетной записи пользователя.

Источник Get-WinHomeLocation

Спасибо, это выглядит действительно полезным. Это будет решением, которого я достигну, если в конечном итоге смогу использовать powershell. dvlsg 5 лет назад 0
1
K7AAY
systeminfo | findstr “Locale” | find "System" | cut -f2 -d( | sed s/)//g 

полагается на текстовые утилиты GNU, cutи, sedпоскольку Windows не имеет возможности фильтрации текста, необходимой из коробки. Их двоичные файлы Win32 можно загрузить с http://gnuwin32.sourceforge.net/packages/coreutils.htm и скопировать в путь к машине или в каталог, где вы будете выполнять команду.

systeminfo является частью Windows, которая извлекает информацию о вашей конфигурации и оборудовании. Мы берем его вывод и фильтруем его с помощью findstr, другого исполняемого файла Window, чтобы показать только строки с «locale», а затем используем find, еще один исполняемый файл Windows, чтобы отфильтровать оставшиеся строки, чтобы показать только те, которые также включают «System». Затем мы используем команду cut, чтобы выбросить все, вплоть до "("), и sed завершает работу, выбрасывая символ закрывающей скобки ")".

Это не Powershell, и хотя он зависит от двух внешних двоичных файлов, они являются доброкачественными и небольшими (39 КБ и 79 КБ).

Спасибо за ответ - на самом деле я получаю сообщение `en-us; English (United States) 'для` System Locale` и `Input Locale`, так что похоже, что оно все еще соответствует языку? dvlsg 5 лет назад 0
Да уж. На самом деле у меня уже был coreutils на моей машине. Точный вывод всей командной строки - "United States". dvlsg 5 лет назад 0
Это регион, что вы хотели, верно? K7AAY 5 лет назад 0
Это так, но он сообщает «Соединенные Штаты», когда моя машина настроена на «Канаду». Я подозреваю, что это тянет Соединенные Штаты из моего выбранного по умолчанию _language_ (который действительно `en-US`). Мне было просто любопытно, есть ли способ получить выбранный регион на скриншотах выше. Похоже, что есть способ получить его, взаимодействуя с `kernel32.dll`, но у меня нет доступа к нему в приложении, которое я использую, за исключением написания отдельного .exe и взаимодействия с ним. dvlsg 5 лет назад 0
1
root

Установка Windows, область по- видимому, сохраняется для каждого пользователя в реестре здесь: HKEY_CURRENT_USER:\Control Panel\International\Geo\. Если вы использовали Powershell для получения этого значения, вы можете сделать это с помощью:

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

Пример для США:

Region CA Region CA PS

Пример для CA:

Region US Region US PS

Отлично спасибо. Я собираюсь пометить это как ответ, поскольку, скорее всего, я в конечном итоге буду использовать (все еще не уверен, смогу ли я рассчитывать на то, что у меня будет доступ к запуску сценариев powershell на компьютерах конечных пользователей), но Get-WinHomeLocation также выглядит очень полезным. dvlsg 5 лет назад 0