Обновите языковую панель в 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>

источник

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