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

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