Обновите языковую панель в Windows Vista / 7 программно

1992
weberik

Я пытаюсь настроить языковую панель (переключатель языка в systray, который появляется, когда у вас установлено несколько языков ввода) для наших пользователей.

language bar

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

Ключи, которые я использую (я пишу их с активной настройкой), находятся в «HKEY_CURRENT_USER \ Раскладка клавиатуры \ Предварительная загрузка», ниже этого ключа указаны имена / значения типа REG_SZ.

Обычно уже есть такие клавиши, как «1» = «0000407» «2» = «0000409», что означает, что у пользователя установлена ​​немецкая и английская раскладки клавиатуры, если я хочу добавить, скажем, итальянский, я бы добавил клавишу «3» = "0000410". после следующего входа / выхода изменения видны пользователю.

Теперь то, что я уже пробовал, - это отправка различных сообщений Windows, таких как WM_SETTINGCHANGE или команда «RUNDLL32.EXE user32.dll, UpdatePerUserSystemParameters». но пока бесполезный результат.

У меня заканчиваются идеи, поэтому выход из системы сотен пользователей / вход в систему не будет таким уж большим: /

Я также думал об автоматизации мышиных кликов (например, с помощью autoit), но это обычно вызывает больше проблем, чем пользы.

4
Вы пробовали AutoIt (http://www.autoitscript.com/site/autoit/)? magicandre1981 10 лет назад 0

1 ответ на вопрос

2
harrymc

Вы не должны делать это посредством редактирования реестра, поскольку наши знания об этом весьма ограничены, но используйте механизм, предоставляемый 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> 

источник

Я пытался сделать это без изменений в реестре. вместо этого я использовал Windows API (используя LoadKeyboardLayout и ActivateKeyboardLayout). безуспешно: / weberik 10 лет назад 0
Эти функции влияют на текущую раскладку клавиатуры, но не на языковую панель. Чтобы найти хорошее решение, вам нужно прикусить пулю и изучить PowerShell. Глотать много, но в Интернете много полезных ресурсов. harrymc 10 лет назад 0
хорошо, я знаком с powershell, но я не смог найти команду ps native. в конце концов, я буду вызывать только команды windows api или wmi из ps, поэтому не имеет большого значения, использую ли я ps, csharp, batch или что-то еще. не могли бы вы указать мне один из этих «полезных ресурсов в Интернете»? weberik 10 лет назад 0
Я подумал, что «Командлеты с международными настройками» выше - то, что вам нужно. Что касается PS, для начала Google для "PowerShell учебник", и у вас будет гораздо больше, чем вы можете прочитать. Другой трюк Google, который я использую, это «тип файла powershell: pdf», который дал мне, например, [эта книга] (http://www.szemtsov.net/books/learn_windows_powershell_3_in_a_month_of_lunches_2nd_edition.pdf). Microsoft, конечно, еще один замечательный источник. harrymc 10 лет назад 0
о, спасибо, теперь я нашел эти командлеты. к сожалению, они недоступны в наших системах (Vista): / weberik 10 лет назад 0