Comment puis-je accéder par programme à la région d'un ordinateur Windows?

4

Comment puis-je accéder par programme à la région d'un ordinateur Windows?

Plus précisément, je recherche cette valeur dans la région & amp; Panneau des paramètres de langue dans Windows 10.

Windows 10 Region

Ou (alternativement), le "domicile" dans le Panneau de configuration - & gt; Région - & gt; Onglet Emplacement.

Windows Control Panel Location

J'espère trouver quelque chose qui fonctionnera pour Windows 7-10. Notant également que ma sélection par défaut la langue est anglais (États-Unis). J'ai essayé à la fois de déconnecter et de redémarrer mon ordinateur pour que les modifications éventuelles soient appliquées. J'ai essayé les commandes suivantes (de 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)

je préférerais ne pas compter sur la langue choisie par le système d'exploitation, dans la mesure du possible. Une solution non-PowerShell serait également intéressante, car je ne suis pas sûr de pouvoir compter sur des scripts PowerShell exécutables sur les machines de l'utilisateur final.


Modifier: Cette réponse sur Stack Overflow fonctionne pour moi et des rapports "Canada" comme prévu (ou "CA", si j’utilise un GeoType de 4, c’est ce que je recherche réellement). Je n'utilise pas C Sharp (ou tout ce qui pourrait interagir avec kernel32.dll directement, donc si quelqu'un sait où obtenir cette information ailleurs, ce serait tout de même apprécié. Mais je peux écrire une application .NET Core qui la saisit pour moi, si nécessaire.

dvlsg
la source

Réponses:

1

Le paramètre Région Windows semble être stocké, par utilisateur, dans le registre ici: HKEY_CURRENT_USER:\Control Panel\International\Geo\. Si vous avez utilisé Powershell pour récupérer cette valeur, vous pouvez le faire avec:

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

Exemple pour nous:

Region CA Region CA PS

Exemple pour CA:

Region US Region US PS

root
la source
Parfait, merci. Je vais marquer celui-ci comme étant la réponse car il est probable que je vais utiliser (je ne suis toujours pas sûr de pouvoir compter sur un accès pour exécuter des scripts PowerShell sur les machines des utilisateurs finaux), mais la Get-WinHomeLocation semble très utile aussi.
dvlsg
3

Comment puis-je obtenir l'emplacement de la maison Windows?

Utilisation Get-WinHomeLocation:

Le Get- WinHomeLocation La cmdlet obtient la valeur de l'utilisateur GeoID   réglage et retourne un .NET GeoID objet. Le paramètre Windows GeoID   est un paramètre utilisateur qui décrit l'emplacement d'origine de l'utilisateur actuel   Compte. Le lieu de résidence est le pays ou la région. Applications qui   exiger l’emplacement du compte utilisateur actuel, tel qu’un compte   pilote pour une application de syntoniseur de télévision, peut utiliser ce paramètre.

Pour un tableau des GeoID, voir Tableau des lieux géographiques .

Exemples

Exemple 1: Afficher le GeoID pour le compte actuel

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

Cette commande renvoie le paramètre GeoID et son nom d'affichage pour le   compte d'utilisateur actuel.

La source Get-WinHomeLocation

DavidPostill
la source
Merci, cela semble vraiment utile. Ce sera la solution que je recherche si je finis par pouvoir utiliser Powershell.
dvlsg
1
systeminfo | findstr “Locale” | find "System" | cut -f2 -d( | sed s/)//g

s'appuie sur les utilitaires de texte GNU cut et sed étant donné que Windows ne dispose pas de la capacité de filtrage de texte nécessaire à l’origine. Leurs fichiers binaires Win32 peuvent être téléchargés à partir de http://gnuwin32.sourceforge.net/packages/coreutils.htm et copié dans le chemin de la machine ou dans le répertoire où vous allez exécuter la commande.

information système est une partie de Windows qui extrait des informations sur votre configuration et votre matériel. Nous prenons sa sortie et le filtrons avec findstr , un autre exécutable de Window, pour afficher uniquement les lignes avec "locale", utilisez ensuite trouver , encore un autre exécutable Windows, pour filtrer les lignes restantes afin d’afficher uniquement celles qui incluent également "Système". Ensuite, nous utilisons Couper tout jeter jusqu’à "(", et sed termine le travail en jetant le caractère de parenthèse proche ")".

Ce n'est pas Powershell, et bien que cela dépende de deux binaires étrangers, ils sont bénins et petits (39 Ko et 79 Ko).

K7AAY
la source
Merci pour la réponse - je suis en train de recevoir en-us;English (United States) rapporté pour les deux System Locale et Input Locale, il semble donc que cela peut encore correspondre à la langue?
dvlsg
Ouais. En fait, j'avais déjà des coreutils sur ma machine. La sortie exacte du canal de commande entier est United States.
dvlsg
C'est la région, ce que tu voulais, non?
K7AAY
C'est, mais ça rapporte United States, quand ma machine est réglée sur Canada. Je soupçonne que cela tire les États-Unis de mon choix par défaut la langue (qui est en effet en-US ). J'étais juste curieux de savoir s'il y avait un moyen d'obtenir la région sélectionnée dans les captures d'écran ci-dessus. On dirait qu'il y a un moyen de l'obtenir en interfaçant avec kernel32.dll, mais je n’ai pas accès à cela dans l’application que j’utilise, à moins d’écrire un fichier .exe séparé et d’interfacer avec cela.
dvlsg