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

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

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

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

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

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

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

Ответы [ 4 ]

16 голосов
/ 18 июня 2009

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

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

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

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

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

HKEY_CURRENT_USER\Control Panel\International

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

HKEY_USERS\(user SID)\Control Panel\International

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

HKEY_USERS\.DEFAULT\Control Panel\International

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

2 голосов
/ 18 июня 2009

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

1 голос
/ 13 декабря 2016

код:

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")
0 голосов
/ 18 апреля 2018

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

В 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 #.

...