Comment puis-je modifier les parameters régionaux / le format de date d’un utilisateur Windows?

J’utilise une application VB6 / COM + qui génère des valeurs de date / heure en fonction des parameters de date courte dans le Panneau de configuration, Paramètres régionaux, pour l’utilisateur qui l’exécute. Le programme qui parsing ensuite cette sortie a un paramètre configurable pour le format de date attendu et se présente dans l’interface utilisateur.

Par exemple, si le paramètre régional pour l’utilisateur est défini sur mm / jj / aaaa et qu’il est sorti le 18/06/2009, l’application qui attend “18/06/2009” échoue avec “La chaîne n’a pas été reconnue comme date / heure valide”.

Comme nous exécutons généralement cette application en tant que compte de service, que nous n’avons pas connecté de manière interactive pour créer un profil, nous définissons généralement le format de date correct puis cochez la case “Appliquer tous les parameters au compte d’utilisateur actuel et au profil utilisateur par défaut”. option.

Je voudrais faire l’utilitaire de configuration C # que j’ai écrit pour que ce désordre puisse définir le format de date par programmation pour un utilisateur donné.

Modifier Je ne voudrais rien de plus que de changer le code, mais je n’ai pas la possibilité de le faire pour le moment.

Je sais aussi que ce que je demande est une mauvaise chose à faire. En ce qui concerne “ce devrait être le choix de l’utilisateur” – je suis cet utilisateur, car je le crée explicitement pour la tâche; Je veux juste définir le format de date par une méthode scriptée, plutôt que de devoir faire le clic moi-même.

Ceci est spécifiquement déconseillé par Microsoft. Toute solution que vous pourriez trouver sera un piratage sale qui cessera probablement de fonctionner rapidement.

Pensez-y de cette façon: qui décidez-vous de ces parameters? Ne pensez-vous pas que c’est la décision de l’utilisateur?

Retour sur le sujet: trouvez un format non ambigu dans lequel les applications peuvent communiquer, telles que YYYYMMDD . L’application affichée peut alors simplement respecter les parameters utilisateur réels, comme il se doit.

Mais, puisque vous ne pouvez pas le changer, insérez simplement dans le registre:

Utilisateur actuel:

 HKEY_CURRENT_USER\Control Panel\International 

Utilisateur spécifique:

 HKEY_USERS\(user SID)\Control Panel\International 

Utilisateur par defaut:

 HKEY_USERS\.DEFAULT\Control Panel\International 

sShortDate est probablement la valeur que vous souhaitez modifier.

Si vous souhaitez modifier le profil en fonction de vos besoins, pourquoi ne pas simplement ignorer les parameters de profil et coder en dur le format souhaité dans votre application?

code:

 Imports System.Threading Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US", False) Microsoft.Win32.Registry.SetValue("HKEY_CURRENT_USER\Control Panel\International", "sShortDate", "M/d/yyyy") 

Si la modification persistante de la culture d’un utilisateur (parameters régionaux) doit être effectuée avec prudence, il existe des cas d’utilisation légitimes.

Sur Windows 8 et Windows Server 2012 et versions ultérieures, Windows PowerShell est livré avec le
intl.cpl commande Set-Culture , l’équivalent programmatique du choix d’une autre région via le Panneau de configuration ( intl.cpl ).

Par exemple, Set-Culture fr-CA est l’équivalent du choix interactif de la région French (Canada) pour l’utilisateur actuel.

Mise en garde: Les cultures mixtes telles que en-DE (sic) ne semblent pas fonctionner avec Windows PowerShell v5.1 – voir cette réponse .

Bien qu’il ne soit pas rapide, il est possible d’appeler des commandes PowerShell à partir de C #.