2009-06-18 93 views
3

我使用VB6/COM +应用程序,它根据控制面板区域设置中的短日期设置为运行它的用户输出日期/时间值。然后解析该输出的程序为其预期的日期格式设置了一个可配置的设置,并在用户界面中显示。如何更改Windows用户的区域设置/日期格式?

例如如果用户的区域设置设置为mm/dd/yyyy,并且输出结果为06/18/2009,则预计为“18/06/2009”的应用程序会因“字符串未被识别为有效的日期时间”而失败。

由于我们通常将此应用程序作为服务帐户运行,我们尚未以交互方式登录以创建配置文件,所以我们通常会设置正确的日期格式,然后勾选“将所有设置应用于当前用户帐户和默认用户配置文件“选项。

我想使我为这个混乱写的C#配置实用程序能够以编程方式为给定用户设置日期格式。

编辑 我只想改变代码,但目前还没有能力做到这一点。

我也知道我所要求的是一件坏事。关于“它应该是用户的选择” - 我am该用户,因为我明确地为任务创建它;我只想通过脚本方法设置日期格式,而不是必须单击自己。

+0

我明白了。我在下面的答案中添加了注册表项。 – Stu 2009-06-19 20:27:02

回答

14

这是微软特别不鼓励的。任何你可能提出的解决方案都将是一个肮脏的黑客,可能很快就会停止工作。

想想这样:你是谁来决定这些设置?你不觉得这是用户的决定吗?

返回主题:找到应用程序通信的明确格式,例如YYYYMMDD。显示的应用程序可以简单地尊重实际的用户设置,因为它应该。

但是,因为你不能改变它,只是捅到注册表:

当前用户:

HKEY_CURRENT_USER\Control Panel\International 

特定的用户:

HKEY_USERS\(user SID)\Control Panel\International 

默认用户:

HKEY_USERS\.DEFAULT\Control Panel\International 

sShortDate是概率干练的你想改变的人。

+0

我知道这是一件坏事。我是那个用户,我明确地为这个任务创建了它;我只想通过脚本方法设置日期格式,而不是必须单击自己。 我只想改变代码,但没有能力这样做。 – crb 2009-06-18 18:11:00

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") 
相关问题