2009-06-18 18 views
3

VB6/COM +アプリケーションを使用して、実行するユーザーのコントロールパネルの地域設定で、短い日付設定に基づいて日付/時刻値を出力します。その出力を解析するプログラムは、期待する日付形式の設定可能な設定を持ち、UIに表示します。Windowsユーザーの地域設定/日付形式を変更するにはどうすればよいですか?

ユーザーの地域設定がmm/dd/yyyyに設定されており、2009年6月18日に出力された場合、「18/06/2009」を予期しているアプリケーションは「Stringが有効なDateTimeとして認識されませんでした」と失敗します。

私たちは通常、プロファイルを作成するために対話的にログインしていないサービスアカウントとしてこのアプリケーションを実行しているため、正しい日付形式を設定してから、「すべての設定を現在のユーザーアカウントに適用デフォルトのユーザープロファイル "オプションを使用します。

私は、この混乱のために書いたC#設定ユーティリティを作成して、指定されたユーザーに対して日付形式をプログラムで設定できるようにしたいと考えています。

編集 私はこのコードを変更する以上のことは望んでいませんが、現時点ではこれを行うことはできません。

また、私が求めていることは悪いことです。 "それはユーザーの選択であるべきです"に関して - 私はです。そのユーザーは、私がタスクに対して明示的に作成するので、私はちょうどクリックして自分自身を行うことではなく、スクリプト形式で日付形式を設定したい。

+0

私は理解しています。私は以下の答えにレジストリキーを追加しました。 – Stu

答えて

14

これは特にMicrosoftによって推奨されていません。あなたが思いつくかもしれない解決策は、おそらく間もなく作業を中止する不潔なハックになります。

このように考える:あなたは誰ですか?それがユーザーの決定だと思いませんか?

トピックに戻る:YYYYMMDDなど、通信するアプリケーションの明確なフォーマットを見つけます。表示されるアプリケーションは、実際のユーザー設定を尊重するだけです。

しかし、あなたはそれを変更することはできませんから、ちょうどレジストリに突く:

現在のユーザー:

HKEY_CURRENT_USER\Control Panel\International 

特定のユーザー:

HKEY_USERS\(user SID)\Control Panel\International 

デフォルトのユーザー:

HKEY_USERS\.DEFAULT\Control Panel\International 

sShortDateはprobですあなたが変えたいと思っているものを敬遠してください。

+0

私はそれが悪いことだと知っています。私はそのユーザーです、私はタスクのために明示的に作成します。私はちょうどクリックして自分自身を行うことではなく、スクリプト形式で日付形式を設定したい。 私は、コードを変更することも何もないよりご希望の、しかし、そうすることはできません。 – crb

+0

ありがとうございます - 私はあなたの答えはうまくいくだろうと確信していますが、問題へのあなたの実践的な態度はどちらにしても、担当者に当然の価値があります。 – crb

2

あなたのニーズに合わせてプロファイルを変更する場合は、プロファイル設定を無視して、アプリケーションで必要なフォーマットをハードコードするだけではどうですか?

0

コード:

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") 
関連する問題