Как я могу изменить региональные настройки пользователя 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#.