Самая толковая статья по настройке неудаляемых раскладок в Windows

Этот материал я нашел вот тут, на сайте у Вадима Стеркина. Огромное ему спасибо за эту статью. Она очень помогла мне в решении подобной проблемы. Далее, собственно, вся статья без изменений со ссылками на доп материалы на его сайте.

Как удалить неудаляемые языки и раскладки клавиатуры в Windows

В чате @winsiders участник Kato пожаловался на необычную проблему после обновления до Windows 10 1803. Изначально у него в системе было три языка – английский (US), русский и украинский, а после обновления добавилось еще два английских – United Kingdom и Canada, которые не удалялись в Параметрах (кнопка Remove недоступна). Соответственно, эти языки появлялись в списке раскладок клавиатуры, хотя в настройках их не было.

PowerShell Language

Теория

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

1(Get-CimInstanceWin32_OperatingSystem).oslanguage

Команда выводит идентификатор языка, где 1033 – английский (US), 1049 – русский, остальные тут в десятичном виде или у Microsoft в шестнадцатеричном (вставляйте значения в калькулятор программиста).

На проблемной ОС эта команда выдала 2057, что соответствует English (United Kingdom). В сочетании с картиной из параметров это было очень странно, потому что у языка дистрибутива никаких языковых пакетов быть не должно, поскольку он и так есть в системе.

Для начала мы попытались удалить языковые пакеты UK и Canada командами lpksetup. Однако к успеху это ни привело, что намекало на фактические отсутствие этих языковых пакетов, но не приближало к решению проблемы фантомных языков. Пришлось зайти с черного хода.

Удаление неудаялемых языков

У PowerShell есть два командлета для управления языками пользователя – Get-WinUserLanguageList и Set-WinUserLanguageList. Первый умеет получать список языков, а второй задавать его. В PowerShell список соответствовал картине в параметрах.

PowerShell Language

Из справки второго командлета не вполне очевидно, как удалить ненужные языки. Зато она дает достаточно толстый намек на то, что вывод первого командлета представляет собой массив. Это можно использовать во благо. Нам нужны только первые три языка из списка.

123$List= Get-WinUserLanguageListSet-WinUserLanguageList$($list[0], $list[1], $list[2])-ForceGet-WinUserLanguageList

Первая команда помещает в переменную массив из списка языков, а вторая задает в качестве текущих языков первые три элемента массива. При этом остальные языки удаляются! Третья команда выводит список языков для проверки.

PowerShell Language

Решено! В который уже раз PowerShell позволяет элегантно решить задачу без запредельных усилий. Если будете экспериментировать под учетной записью Microsoft, отключите синхронизацию языковых параметров во избежание нежелательных эффектов (я словил несколько странностей :).

Удаление неудаялемых раскладок клавиатуры

Этот раздел был добавлен значительно позже, потому что в статью приходят люди со смежной проблемой — появление фантомных раскладок клавиатуры при отсутствии соответствующих установленных языков. У этой проблемы может быть несколько вариантов решения.

Игнорирование дистанционных раскладок

Примените твик и перезагрузитесь. См. также пост в канале Telegram с кратким объяснением и готовым REG-файлом.

1234Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]"IgnoreRemoteKeyboardLayout"=dword:00000001

Удаление раскладок из разделов Preload

12HKEY_USERS\.DEFAULT\Keyboard Layout\PreloadHKEY_CURRENT_USER\Keyboard Layout\Preload

Копирование языковых параметров

Читатель Yaroslav Chernousov сообщил, что после установки раскладки Бирмана ненужные раскладки возвращались даже после их удаления из разделов Preload. Ему помогло копирование текущих языковых параметров в экран приветствия / системные учетные записи и новые учетные записи пользователей. +

intl.cpl — дальше на картинке.

Удаление раскладок из системы

Это подходит в случае, если раскладка не нужна в принципе. Раскладки прописаны в разделе

1HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\<LCID>

Нужно удалять подраздел с нежелательной раскладкой.

Удаление раскладки после смены кодовой страницы (языка для неюникодных программ)

В современных Windows при смене кодовой страницы (например, с английской на русскую) автоматически добавляется для всех пользователей и метод ввода этого языка. Причем сам язык не добавляется! Однако в большинстве случаев этот язык уже установлен у пользователей, поэтому они ничего не замечают. Но бывает иначе. Варианты решения:

  • Добавить в параметрах такой же язык, как установлен для кодовой страницы, а затем удалить его. В результате удаляется и ненужная раскладка. Самый простой способ, но у одного из читателей после перезагрузки раскладка возвращалась.
  • Добавлять и тут же удалять язык скриптом из автозагрузки. Прием против лома — возвращения раскладки после перезагрузки.
  • Заменить в языке проблемный метод ввода на несуществующий. Элегантное решение, недоступное в графическом интерфейсе.

В Windows 10 1803 языковые настройки практически полностью перекочевали из классической панели управления в Параметры (исключение составляет классическое окно с настройками сочетаний клавиш и языковой панели). В связи с этим я обновил статью про 6 языковых настроек, которые могут поставить вас в тупик в контексте изменившегося интерфейса.

Добавить комментарий