Обновите языковую панель в Windows Vista/7 программно
Я пытаюсь настроить языковую панель (переключатель языка в systray, который появляется, когда у вас установлено несколько языков ввода) для наших пользователей.
Я могу легко добавить новые языки, используя regkeys ниже HKCU, но проблема в том, что пользователь должен перезагрузить или перезагрузить свой компьютер, чтобы увидеть эффект.
Ключи, которые я использую (я пишу их с активной настройкой), находятся в "HKEY_CURRENT_USER\ Раскладка клавиатуры \ Предварительная загрузка", ниже этого ключа указаны имена / значения типа REG_SZ.
Обычно уже есть такие клавиши, как "1" = "0000407" "2" = "0000409", что означает, что у пользователя установлена немецкая и английская раскладки клавиатуры, если я хочу добавить, скажем, итальянский, я бы добавил клавишу "3"="0000410". после следующего входа / выхода изменения видны пользователю.
Теперь я уже пытался отправлять различные сообщения Windows, такие как WM_SETTINGCHANGE или команда "RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters". но пока бесполезный результат.
У меня заканчиваются идеи, поэтому выход из системы сотен пользователей / вход в систему не будет таким уж большим: /
Я также подумал об автоматизации мышиных кликов (например, с помощью autoit), но это обычно вызывает больше проблем, чем пользы.
1 ответ
Вы не должны делать это путем редактирования реестра, поскольку наши знания об этом весьма ограничены, но используйте механизм, предоставляемый Windows.
Microsoft создала Windows PowerShell в качестве основного интерфейса программирования, который обеспечивает доступ практически ко всем функциям Windows. К сожалению, семейство функций PowerShell, относящихся к языку " Командлеты международных настроек", было представлено только для Windows 8/Server 2012 и недоступно для Windows 7 или Vista.
Тем не менее, существуют решения для Windows 7 или Vista, как описано в статье MSDN:
Windows Vista Конфигурация командной строки международных настроек.
Пример использования этого метода можно найти в разделе "Настройка региональных и языковых параметров международных настроек с помощью автоматизации командной строки", в которой в основном используется специально созданный XML-файл с командой:
control intl.cpl,, /f:"intlsettings.xml"
Ниже перечислены некоторые примеры XML-файлов.
Изменить текущий язык
<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend">
<!--User List-->
<gs:UserList>
<gs:User UserID="Current"/>
</gs:UserList>
<!-- User Locale-->
<gs:UserLocale>
<gs:Locale Name="es-US" SetAsCurrent="true"/>
</gs:UserLocale>
</gs:GlobalizationServices>
Добавить язык клавиатуры
<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend">
<gs:UserList>
<gs:User UserID="Current" CopySettingsToDefaultUserAcct="true" CopySettingsToSystemAcct="true"/></gs:UserList>
<gs:InputPreferences>
<gs:InputLanguageID Action="add" ID="0804:E0200804"/>
</gs:InputPreferences>
</gs:GlobalizationServices>
Удалить язык клавиатуры
<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend">
<gs:UserList>
<gs:User UserID="Current" CopySettingsToDefaultUserAcct="true" CopySettingsToSystemAcct="true"/></gs:UserList>
<gs:InputPreferences>
<gs:InputLanguageID Action="remove" ID="0804:E0200804"/>
</gs:InputPreferences>
</gs:GlobalizationServices>