Пропал значок клавиатуры в Windows 7 (языковая панель).

И как я это поборол.

Вроде бы, инструкций в сети на эту тему множество, но у клиента беда с языковой панелью оказалась какой-то нетривиальной, в инструкциях, как обычно, оказалось не все, так что пишу по горячим следам свой способ, может будет кому-то полезен.

Забегая вперед, дело, похоже, было в антивирусе, то ли Касперский, то ли какая-то древняя версия Авиры нагадила в автозагрузку и Планировщик задач, похерив запуск языковой панели. У клиента сначала стояло одно, потом другое, глюк он заметил где-то между, потому сразу не обратился, а кто конкретно виноват, я выяснять, естественно не стал.

Шаг первый. Стандартная проверка.

1. Заходим в Панель управления —> Язык и региональные стандарты или через Выполнить (клавиши Win+R): команда: intl.cpl

2. Переключаемся на вкладку Языки и клавиатуры, нажимаем кнопку Изменить клавиатуру.

Откроется окно Языки и службы текстового ввода.

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

rundll32 shell32.dll,Control_RunDLL input.dll

В этом окне переходим на вкладку Языковая панель и проверяем, чтобы переключатель (радиокнопка) была в положении Закреплена в панели задач.

Если это так, но значка клавиатуры нет, то можно попробовать переключить радиокнопку в положение Скрыта или Располагается в произвольном месте рабочего стола, потом нажать кнопку Применить, вернуть радиокнопку в положение Закреплена в панели задач, вновь нажать Применить или OK. Если значок клавиатуры вернулся, то все хорошо, открываем шампанское и празднуем. Если нет, переходим к следующему шагу.

ВНИМАНИЕ!

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

1. Ищем в поиске меню Пуск «Создание точки восстановления» и запускаем соответствующий ярлык, или вводим команду systempropertiesprotection в окне Выполнить или командной строке. Также, можно щелкнуть правой клавишей мыши по значку Компьютер, в контекстном меню выбрать пункт Свойства, далее щелкнуть по ссылке Дополнительные параметры системы, и в появившемся окне перейти на вкладку Защита системы. Нажимаем кнопку Создать

В следующем окне вводим имя точки восстановления, любое, главное, чтоб сами потом нашли, например RestoreLangPanel.

Если все хорошо, система скажет, что точка восстановления создана успешно.


Шаг второй. Проверка службы Планировщика заданий Windows.

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

services.msc

И ищем там службу Планировщик заданий. Ее состояние должно быть в значении Работает, а тип запуска Автоматически. Это одна из основных системных служб, так что если она отключена — проще переустановить систему.

Проверка задания Планировщика

Если проблема не решилась на втором шаге, то, возможно, испорчена стандартная задача Планировщика заданий Windows, отвечающая за запуск языковой панели.

1. Запускаем планировщик заданий через Пуск —> Все программы —> Стандартные —> Служебные —> Планировщик заданий или через командную строку или Выполнить:

taskschd.msc /s

Далее, в левой панели открываем папку Библиотека планировщика заданий/Microsoft/Windows/TextServiceFramework

А далее, большинство найденных мной инструкций сыплются. Предлагают проверить, есть ли задача MsCtfMonitor:

Но, когда ее нет:


почему-то сразу рекомендуют импортировать задачу, в виде XML-файла, причем еще и не всегда правильную.

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

Выбранная задача "{0}" больше не существует. Чтобы увидеть текущие задачи, нажмите Обновить

При попытке обновить, ошибка выскочит снова.

Так что перед импортом задачи сначала надо проверить, нет ли ее на самом деле, почистить кэш Планировщика.

1. Закрываем Планировщик
2. Идем в каталог C:\Windows\System32\Tasks\Microsoft\Windows\TextServicesFramework\ и смотрим на его содержимое. В моем случае, задача MsCtfMonitor уже была, но поврежденная.

Копируем файл(ы) из этого каталога куда-нибудь (для бэкапа) и удаляем из каталога TextServicesFramework

3. Чистим кэш планировщика:
— Запускаем Редактор реестра (Regedit) через командную строку или Выполнить, командой regedit
— Идем в ветку Реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree, ищем там задачу MsCtfMonitor и удаляем ее.
— Можно, но не обязательно, перезагрузить компьютер.

Далее, можно импортировать задачу:

Запускаем Планировщик заданий, переходим по дереву заданий в Библиотека планировщика заданий/Microsoft/Windows/TextServiceFramework и импортируем XML-файл, нажав на ссылку Импортировать задачу в панели Действия:

Скачать с Mega.NZ
Скачать с Google.Drive
Файл на PasteBin

Как отличить правильный XML от неверного — в первую очередь посмотреть, есть ли в файле указание на нужные библиотеки MsCtfMonitor.dll:

<RegistrationInfo>

<Source>$(@%systemRoot%\system32\MsCtfMonitor.dll,-1000) </Source>
<Description>$(@%systemRoot%\system32\MsCtfMonitor.dll,-1001) </Description>
<URI>Microsoft\Windows\TextServicesFramework\MsCtfMonitor</URI>
<SecurityDescriptor>D:(A;;FA;;;BA)(A;;FA;;;SY)(A;;FR;;;BU)
</SecurityDescriptor>
</RegistrationInfo>

Далее, перезагружаем компьютер.

Если значок клавиатуры/языка/языковая панель не появилась, надо перейти к третьему шагу.

Шаг третий, проверка ctfmon.exe

Сначала идем в C:\Windows\System32\ и ищем там файл ctfmon.exe, если он есть, идем дальше, если файл отсутствует — достаем его из дистрибутива Windows, кладем в C:\Windows\System32\ или запускаем

sfc /scannow

с правами администратора.

Если файл есть, то сначала проверяем его на заражение вирусами. Некоторые вирусы или внедряют в ctfmon.exe свой код (иногда кривой, косой и написанный дендрофекальным методом), или вообще заменяют исполняемый файл. Так что стоит сначала его проверить на вирусы (можно онлайн-сервисами российского DrWeb или международным VirusTotal). В моем случае обошлось. И файл нашелся, и вирусов не было.
DrWeb:


Сканировать файл

VirusTotal:

File distributed by Microsoft, т.е. все ОК.
Сканировать файл на VirusTotal

Далее, надо проверить, прописан ли запуск ctfmon.exe в Реестре Windows. Запускаем Regedit и переходим по адресу HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

Если там нет строкового параметра, содержащего путь к ctfmon.exe,

то необходимо добавить его вручную, или воспользоваться готовым REG-файлом (сработает, если каталог Windows называется Windows и расположен на диске C:\)

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]

"ctfmon.exe"="C:\\Windows\\System32\\ctfmon.exe"

Скачать файл с Mega.NZ
Скачать файл с Google.Drive
Файл на PasteBin

После внесения изменений в Реестр, нужно перезагрузить компьютер.

У меня все получилось:

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *