2009-06-18 5 views
3

J'utilise une application VB6/COM + qui affiche les valeurs date/heure en fonction des paramètres de date courts dans le Panneau de configuration, Paramètres régionaux, pour l'utilisateur qui l'exécute. Le programme qui analyse ensuite cette sortie a un paramètre configurable pour le format de date attendu et présente dans l'interface utilisateur.Comment puis-je modifier les paramètres régionaux/format de date d'un utilisateur Windows?

par exemple. Si le paramètre régional pour l'utilisateur est défini sur mm/jj/aaaa et qu'il sort le 18/06/2009, l'application qui attend le "18/06/2009" échoue avec "La chaîne n'a pas été reconnue comme un DateTime 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 paramètres au compte d'utilisateur actuel et option "profil utilisateur par défaut".

Je voudrais faire l'utilitaire de configuration C# que j'ai écrit pour ce désordre pour pouvoir définir le format de date par programme 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 "il devrait être le choix de l'utilisateur" - I suis cet utilisateur, comme je le crée explicitement pour la tâche; Je veux juste définir le format de la date par une méthode scriptée, plutôt que de devoir cliquer moi-même.

+0

Je comprends. J'ai ajouté des clés de registre à ma réponse ci-dessous. – Stu

Répondre

14

Ceci est spécifiquement déconseillé par Microsoft. Toute solution que vous pourriez trouver sera un hack sale qui va probablement cesser de fonctionner bientôt. Pensez-y de cette façon: qui êtes-vous pour décider ces paramètres? Ne pensez-vous pas que c'est la décision de l'utilisateur?

Retour au sujet: trouvez un format non ambigu pour les applications à communiquer, comme YYYYMMDD. L'application qui s'affiche peut alors simplement respecter les paramètres utilisateur réels, comme il se doit.

Mais, puisque vous ne pouvez pas le changer, juste percez dans le registre:

utilisateur actuel:

HKEY_CURRENT_USER\Control Panel\International 

utilisateur spécifique:

HKEY_USERS\(user SID)\Control Panel\International 

utilisateur par défaut:

HKEY_USERS\.DEFAULT\Control Panel\International 

sShortDate est prob habilement celui que vous voulez changer.

+0

Je sais que c'est une mauvaise chose à faire. Je suis cet utilisateur, je le crée explicitement pour la tâche; Je veux juste définir le format de la date par une méthode scriptée, plutôt que de devoir cliquer moi-même. Je ne voudrais rien de plus que de changer le code, mais je n'ai pas la possibilité de le faire. – crb

+0

Merci - Je suis assez confiant que votre réponse fonctionnera, mais de toute façon votre attitude pragmatique au problème mérite certainement le représentant. – crb

2

Si vous souhaitez modifier le profil en fonction de vos besoins, pourquoi ne pas simplement ignorer les paramètres du profil et coder en dur le format que vous souhaitez dans votre application?

0

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") 
Questions connexes