Как я могу изменить региональные настройки пользователя Windows / формат даты?

Я использую приложение VB6/COM+, которое выводит значения даты / времени на основе настроек краткой даты в Панели управления, Региональные настройки, для пользователя, который его запускает. Программа, которая затем анализирует этот вывод, имеет настраиваемую настройку для ожидаемого формата даты и представляет его в пользовательском интерфейсе.

Например, если региональная настройка для пользователя установлена ​​в мм / дд / гггг, и она выдает 18.06.2009, приложение, ожидающее "18/06/2009", завершается с ошибкой "Строка не была распознана как действительный DateTime".

Поскольку мы обычно запускаем это приложение как служебную учетную запись, для которой мы не вошли в систему в интерактивном режиме для создания профиля, мы обычно устанавливаем правильный формат даты и затем ставим галочку "Применить все настройки к текущей учетной записи пользователя и профилю пользователя по умолчанию". вариант.

Я хотел бы сделать утилиту конфигурирования C#, которую я написал для этого беспорядка, чтобы иметь возможность устанавливать формат даты программно для данного пользователя.

Редактировать Я не хотел бы ничего менять, кроме как изменить код, но у меня нет возможности сделать это в настоящее время.

Я также знаю, что то, что я спрашиваю, плохо. Что касается "это должен быть выбор пользователя" - я тот пользователь, поскольку я создаю его явно для задачи; Я просто хочу установить формат даты с помощью скриптового метода, а не самому делать щелчки.

4 ответа

Решение

Это особенно не рекомендуется Microsoft. Любое решение, которое вы можете придумать, будет грязным взломом, который, вероятно, скоро перестанет работать.

Подумайте об этом так: кто вы, чтобы решить эти настройки? Вы не думаете, что это решение пользователя?

Вернемся к теме: найдите недвусмысленный формат для приложений, с которыми можно общаться, например: YYYYMMDD, Затем отображаемое приложение может просто учитывать фактические настройки пользователя, как и должно быть.

Но, поскольку вы не можете изменить его, просто зайдите в реестр:

Текущий пользователь:

HKEY_CURRENT_USER\Control Panel\International

Конкретный пользователь:

HKEY_USERS\(user SID)\Control Panel\International

Пользователь по умолчанию:

HKEY_USERS\.DEFAULT\Control Panel\International

sShortDate это, вероятно, значение, которое вы хотите изменить.

Если вы собираетесь изменить профиль в соответствии со своими потребностями, почему бы просто не проигнорировать настройки профиля и жестко указать нужный формат в своем приложении?

Код:

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

Хотя постоянное изменение культуры пользователя (региональных настроек) необходимо делать осторожно, существуют законные варианты использования.

В Windows 8 и Windows Server 2012 и более поздних версиях Windows PowerShell поставляется с
Set-Culture командлет, который является программным эквивалентом выбора другого региона через панель управления (intl.cpl).

Например, Set-Culture fr-CA является эквивалентом интерактивного выбора региона French (Canada) для текущего пользователя.

Предостережение: смешанные культуры, такие как en-DE (SIC), кажется, не работает с Windows PowerShell v5.1 - см. мой ответ.

Хотя это не будет быстрым, можно вызывать команды PowerShell из C#.

Другие вопросы по тегам