Плохо работает переключение языка клавиатуры Windows 10/11

Проблема в основном на ноутбуках после закрытия крышки и пробуждения наблюдается некорректное переключение языка клавиатуры.

Возникает это из-за неправильного пробуждения ctfmon.exe

Решение: перезапускать сервис каждый раз после пробуждения

Я написал простой .bat скрипт для установки планировщика на пробуждение который перезапускает ctfmon.exe:

@echo off
chcp 65001 >nul
title CTFMON Wakeup Task Manager

set TASK_NAME=Restart_ctfmon_on_lid_wakeup
set PS_DIR=%LOCALAPPDATA%\ctfmon_wakeup_fix
set PS_NOLOG=%PS_DIR%\restart_ctfmon.ps1
set PS_LOG=%PS_DIR%\restart_ctfmon_log.ps1

:menu
cls
echo ================================
echo   CTFMON Wakeup Task Manager
echo ================================
echo.
echo 1 - Установить задачу (без лога)
echo 2 - Установить задачу (с логом)
echo 3 - Удалить задачу
echo 4 - Проверить задачу
echo 5 - Выход
echo.
set /p choice=Выбери действие: 

if "%choice%"=="1" goto install_nolog
if "%choice%"=="2" goto install_log
if "%choice%"=="3" goto remove
if "%choice%"=="4" goto check
if "%choice%"=="5" exit
goto menu


:prepare_ps
if not exist "%PS_DIR%" mkdir "%PS_DIR%" >nul 2>&1

> "%PS_NOLOG%" (
echo Start-Sleep -Seconds 3
echo Stop-Process -Name ctfmon -Force -ErrorAction SilentlyContinue
echo Start-Process "$env:WINDIR\System32\ctfmon.exe"
)

> "%PS_LOG%" (
echo Add-Content -Path "$env:USERPROFILE\Desktop\ctfmon_wakeup_log.txt" -Value "$(Get-Date) - restart ctfmon"
echo Start-Sleep -Seconds 3
echo Stop-Process -Name ctfmon -Force -ErrorAction SilentlyContinue
echo Start-Process "$env:WINDIR\System32\ctfmon.exe"
)
exit /b


:install_nolog
call :prepare_ps
call :create_task "%PS_NOLOG%"
echo.
echo [OK] Задача установлена (без окна, без лога)
pause
goto menu


:install_log
call :prepare_ps
call :create_task "%PS_LOG%"
echo.
echo [OK] Задача установлена (без окна, с логом на рабочий стол)
pause
goto menu


:create_task
schtasks /Delete /TN "%TASK_NAME%" /F >nul 2>&1

schtasks /Create ^
 /TN "%TASK_NAME%" ^
 /SC ONEVENT ^
 /EC System ^
 /MO "*[System[(Provider[@Name='Microsoft-Windows-Power-Troubleshooter'] and EventID=1) or (Provider[@Name='Microsoft-Windows-Kernel-Power'] and (EventID=507 or EventID=506 or EventID=105))]]" ^
 /TR "powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File \"%~1\"" ^
 /RL HIGHEST ^
 /F >nul

if %ERRORLEVEL% NEQ 0 (
    echo.
    echo [ERROR] Не удалось создать задачу. Запусти BAT от имени администратора.
    pause
)
exit /b


:remove
schtasks /Delete /TN "%TASK_NAME%" /F >nul 2>&1

if %ERRORLEVEL% EQU 0 (
    echo.
    echo [OK] Задача удалена
) else (
    echo.
    echo [INFO] Задача не найдена
)

pause
goto menu


:check
echo.
schtasks /Query /TN "%TASK_NAME%" /V /FO LIST
echo.
pause
goto menu

Запустите от имени администратора.

После этого выберите пункт 1 и нажмите Enter.

После перезагрузки или закрытии открытии крышки ноутбука язык должен корректно меняться.


Также если раздражает всплывающее окно при переключении языка можно выполнить код в командной строке cmd.exe:

reg add "HKCU\Keyboard Layout\Toggle" /v "HotkeyShowDelayInMS" /t REG_DWORD /d 99999999 /f
reg add "HKCU\Keyboard Layout\Toggle" /v "InputSwitcherShowOnMultiPress" /t REG_DWORD /d 0 /f

или запустить .reg файл

После этого перезагрузите компьютер или explorer.exe

Размещено от


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

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