
Комментарии 61
Идут годы, а переключение раскладки всё тормозит со времён windows xp по-моему.
Идут годы, и статьи про работу в Win11 образца 2026 начинают напоминать статьи по работу в линухах-бздях года так 2006го. про себя помню, что где-то примерно в 2005м я начал пользовать линукс для домашнего бытия, и одно время уж не помню с чего в нем у меня были какие-то траблы именно с переключением раскладок, делал это мышкой, и подбешивало. но недолго. А в винде я за все время (с 1997го) никаких таких проблем не встречал, уж не знаю, почему. А перебрал я 3.11, 95, 98, Me, 2k, 2k3, Xp, Vista, 7, 8,10 в разных версиях. Чудны дела твои, Господи...
Я встречал проблемы с переключением в XP/VISTA/8/10/11
Раскладка реально периодически не меняется и всегда в рандомные моменты.
2k3 это разве не серверная?
Мне кажется оно железо-зависимо. Исключительно на одном ноуте встречал стабильную проблему с переключением языка, но там в целом был отдельный драйвер для функциональных клавиш и alt ctrl и прочего (зачем - вопросы к hp). На десятках других машин ни разу не ловил проблем с переключением.
Но для разработки автопереключение часто неудобно
Мне вот интересно - практически каждый, кто упоминает, почему не пользуется пунтой, говорит, что ему "автопереключение неудобно".
Так если оно неудобно - оно отключается. Можно глобально, можно на уровне приложений. И пунту использоваться как инструмент для переключения раскладок, ручного исправления неправильно набранного текста и "дневника". Пусть последнее и не секьюрно, но полезно бывает.
Впрочем, я пунтой тоже уже не пользуюсь, но по другим причинам.
Впрочем, я пунтой тоже уже не пользуюсь, но по другим причинам
Ну вот да, ставить добровольно себе в систему кейлоггер от яндекса, я лучше сам раскладку переключу 🤷
Пунта тоже норм, но я там не нашел возможности настроить переключение на Alt+Shift
Так она системный переключатель не обязательно заменяет, может параллельно работать.
Но пока я ей пользовался, я переключение на правый Ctrl вешал. Сейчас у меня оно висит на правой макро (А), но всё равно Сtrl+Shift пользуюсь.
Правый контрол это же неудобно. Левая рука на клаве слева обычно, а правая на мышке, чтоб нажать правый контрол, надо какую-то из рук далеко перенести, что очень не эргономично
Переключаю с помощью Ctrl+Shift, мне так удобнее, они рядом и можно одним пальцем нажать. И не сбоит, первый раз слышу, что проблема.
Сам юзаю эту комбинацию и иногда бывает, что после быстрого нажатия не переключается. Правда не знал, что это какая-то глобальная проблема. Юзаю Windows 11 Pro последней стабильной версии.
Сбоит, временами несколько раз ткнуть надо. Наблюдаю много лет, причём зависимости явной не вижу. Сейчас чаще в 11 наблюдаю, хотя и в 10 есть.
При Гейтсе такого не было!) Периодически этот глюк замечаю, на разных ПК, ужасно бесит. И ЕМНИП это в 11 началось. Тоже использую Ctrl+Shift - более удобное и логичное сочетание. Для серверов оставляю неправославный - через Alt, чтобы путаницы при переключении языка не было, когда подключаешься.
Переключаю с помощью Ctrl+Shift, мне так удобнее, они рядом и можно одним пальцем нажать.
Ещё удобнее включать один язык по Ctrl-Shift, а второй - по Alt-Shift.
У меня немощный мизинец...
Есть такая проблема, раньше стояло переключение Ctrl+Shift, думал в этом дело, переставил на Alt+Shift - разницы не заметил, приходится пока привыкать к Win+Пробел. Попробую ещё Ваш вариант.
У кого нет проблемы люди просто мало печатают и редко переключают . Или скорость их устраивает. Проблема есть и она задолбала.
Этот скрипт не работает в некоторых программах. Тут например mstsc.exe

Гпт сделал бинарник на расте заточенный конкретно под эту задачу, но запускать его приходится от имени админа иначе такая же проблема. Говорит что как вариант можно подписать бинарник. Или рут или подпись или не везде работать будет.
Если запускать скрипт через AutoHotkey64_UIA.exe, то он будет работать везде, в том числе и в программах, запущенных с правами администратора через UAC. Только надо, чтобы Autohotkey был установлен в Program Files. Это в Help написано https://www.autohotkey.com/docs/v2/Program.htm#Installer_uiAccess
https://habr.com/ru/posts/988678/ тут скрипт по интересней.
давно уже переключаю только через double shift программой Alt SwitchER
Layout Fix работает?
Повесил переключение на кнопку CapsLock (как ламер через Пунто) и все.
Вообще до сих пор удивлен, что Майкрософт со своей поддержкой винды по всему миру не додумалась одну-две кнопки раскладки на клавиатуру пропихнуть, по аналогии с Win и Copilot.
На советских компах была отдельная кнопка Rus/Lat, некоторые отечественные производители делают клаву с такой кнопкой вместо Win кнопки.
Значит это у всех так, я думал это у меня с головой не в порядке 😂 благодарю за статью
HotkeyP ещё есть - довольно гибкая программа для настройки алиасов гор. клавиш
Никогда в Windows (от Win98 до Win11) не замечал задержки при переключении языка (Alt+Shift). Печатаю много и быстро (разработка). Но когда пересел на MacOS сразу всплыла эта проблема! Очень раздражает, хотя макбук не слабенький вроде - MacBook M3 Pro. Всё перепробовал, лучше ситуация не стала, приходится терпеть и при переключениях ждать.
Спасибо за статью, я уже думал что у меня клавиатура не исправна. Но стоит добавить что autohotkey воспринимается некоторыми античит программами как запрещенное ПО. У меня с ним например не запускается Battlefield 6
Я тоже думал, что шиза уже. Недавно вообще начало два раза переключать (на новую и обратно), помогал только перезапуск.
Но да, ахк не лучший вариант, если много играете, финалс и бф заблочит вход. Подписание, изменение класса у окон не помогает. Пришлось все скрипты переписывать на c#
Проблеме лет 10, каждый раз когда мне говорят что windows уже нормально работает вспоминаю её и "панель задач уже присутствует на данном экране".
Говорят в превью билде сейчас тестируют новую реализацию пуска и большую переработку explorer, в которой отошли от xaml и таких проблем уже нет. Верится с трудом но может наконец избавимся от этой проблемы.
Эта проблема связана с пользователем, а не с Виндой. Суть проблемы в том, что Alt отпускается раньше, чем нажимается Ctrl. Это ведь сочетание клавиш и Alt - модификатор. Я это много раз замечал за собой. И стараюсь заставлять себя дольше держать Alt зажатым.
Как начал пользоваться маком, под видой тоже настроил использование CAPS для переключения языков. Это реально удобно.
Я использую свой конфиг для kanata (крохотная утилита) - CAPS между двумя основными языками и стандартное переключение на третий, который используется редко.
Перешёл на прямой выбор языка через Ctrl+Shift+Цифра, т.к. активно пользуюсь тремя раскладками. Работает стабильно, легко сразу прыгнуть на нужный язык.
Эту беду замечаю с вин7. Сначала думал что не одномоментно нажимаю комбинацию, перевел все на тильду, но это просто раскрыло суть: приоритет прерывания по переключению раскладки очень низкий, из-за этого в одних приложениях это часто проявляется, в других нет. Иногда доходит до глупости, нажал, печатаешь не то, нажал снова не то, на третий раз уже медленно, отслеживая глазами, что оно графически переключилось - тогда работает. На самом деле приоритет прерывания повысить и все заработает, но это должны сделать майки.
А почему не использовать вин + пробел? Оно штатное, работает адекватно, да и в целом убобно что на пол экрана плашка с тем какой язык выбран.
Единственная причина как по мне это если как у коментатора выше более 2х языков и хочется выбрать конкретный а не методом перебора
У меня тоже 3 языка. В настройках клавиатуры windows 11 назначил ctrl +1 англ. Ctrl +2 русский. Ctrl+3 иврит.

скрипт из поста, без правок - вылетает в дебаг при вызове
Всё работает, но автору следовало бы расписать всё более подробно в т.ч. запуск для программ от имени администратора и с вариантом Ctrl + Shift, а не делать ссылку на бошьшую доку. В общем статья полугодная получилась, хотя и на этом спасибо. GPT помог допилить.
Данный код не учитывает проблемы с задержкой, из-за которой вводимые символы не соответствуют раскладке клавиатуры какое-то время после переключения. Исправил тут: https://www.autohotkey.com/boards/viewtopic.php?f=83&t=140529&p=617670#p617670
; WM_INPUTLANGCHANGEREQUEST
SetKeyboardLayout(id) => PostMessage(0x50, 0, id, , 'A')
_SetKeyboardLayout(id) => SendMessage(0x50, 0, id, , 'A')
GetKeyboardLayout() => DllCall(
'GetKeyboardLayout', 'Ptr',
DllCall(
'GetWindowThreadProcessId',
'Ptr', DllCall('GetForegroundWindow'),
'UInt', 0
)
)
SwitchKeyboardLayout() {
static toggle := 0x04190419 == GetKeyboardLayout()
static layouts := Map(
0, 0x04190419, ; RU
1, 0x04090409 ; EN
)
_SetKeyboardLayout(layouts[toggle])
while (layouts[toggle] != GetKeyboardLayout())
Sleep(100)
toggle ^= 1
return toggle
}
; SendLevel = 3: intercept all keys including AHK-generated;
; Timeout = 2 sec.: stop after 2 seconds (unless .Stop() has been called during that period)
InputKeysHook := InputHook('I3 T2')
!f::{
InputKeysHook.Start()
SwitchKeyboardLayout()
loop parse, InputKeysHook.Input {
SendEvent('{vk' GetKeyVK(A_LoopField) '}')
}
InputKeysHook.Stop()
}Для тех, кто нашёл эту статью через Google — есть более элегантное решение: переключение раскладки через Caps Lock (github.com/WoozyMasta/Switchy). Это и удобнее, чем Alt+Shift, и устраняет этот баг.
UPD: сделал форк (спасибо Claude) для переключения языка по Caps Lock (при нажатии) и включения Caps Lock по Shift+Caps Lock (тоже при нажатии). Это удобнее и убирает возможные проблемы со слепой печатью (например, когда машинально быстрее нажимаешь на букву чем отпускаешь caps lock. Столкнулся с этим лично — отсюда и форк)
UPD2: сделал свою программу (так же через AI), там меньше кода и она чуть меньше весит/потребляет по сравнению с Switchy: https://github.com/oifj34f34f/caps_switcher
Спасибо огромное автору! У меня вообще по жесткачу было. Я просто комп не выключаю вообще месяцами. Я подумал клава плохая, купил дорогую, проблема не ушла))). Думаю ну может я нажимаю быстро слишком и тупит. Реестр правил не помогло, Иногда по 10 раз нажимал пытался переключить. Сколько ты нервов сберег людям!)
Нашел косяк. Keil Uvision 5.36.0.0
в приложении смена языка работает, но если жмем CTL+F открываем окно поиска, и там не работает переключение языка через клаву вообще теперь. Только мышкой в трее.
Блин еще один косяк. Когда жму Save as где нибудь в каком нибудь приложении и нужно ввести название файла тоже не меняется раскладка с этим скриптом.
Исправил косяк. Не я а Клод.
Что не работало и почему:
PostMessage (WM_INPUTLANGCHANGEREQUEST) не работает для системных/привилегированных окон — диалоги открытия файлов, Win+R, окна поиска. Окно получает сообщение но игнорирует его.
Два исправления:
1. ControlGetFocus — вместо отправки сообщения на окно-контейнер, берём hwnd конкретного сфокусированного контрола (поля ввода) внутри окна. Для многих диалогов это уже помогает.
2. ActivateKeyboardLayout — системный вызов WinAPI, который переключает раскладку напрямую на уровне системы, в обход PostMessage. Работает там где PostMessage игнорируется.
Важно: скрипт нужно запускать от имени администратора, иначе ActivateKeyboardLayout не сработает для привилегированных окон.
Вот целиком скрипт переписанный:
#Requires AutoHotkey v2.0 #SingleInstance Force
~*LAlt::TrySwitch() ~*RAlt::TrySwitch() ~*LShift::TrySwitch() ~*RShift::TrySwitch()
TrySwitch() { static lastTick := 0 if !(GetKeyState(“Alt”, “P”) && GetKeyState(“Shift”, “P”)) return now := A_TickCount if (now - lastTick < 150) return lastTick := now ToggleRuEn() }
ToggleRuEn() { static RU := 0x0419 static EN := 0x0409
hwnd := WinActive("A")
if !hwnd
return
; Берём сфокусированный контрол внутри окна (например поле ввода в диалоге)
focusedHwnd := ControlGetFocus("A")
if focusedHwnd
hwnd := focusedHwnd
threadId := DllCall("GetWindowThreadProcessId", "Ptr", hwnd, "UInt*", 0, "UInt")
hkl := DllCall("GetKeyboardLayout", "UInt", threadId, "UPtr")
langId := hkl & 0xFFFF
target := (langId = RU) ? EN : RU
targetHKL := DllCall("LoadKeyboardLayout", "Str", Format("{:08X}", target), "UInt", 0, "UPtr")
if !targetHKL
targetHKL := (target << 16) | target
; Для обычных окон
DllCall("PostMessage", "Ptr", hwnd, "UInt", 0x50, "Ptr", 0, "Ptr", targetHKL)
; Для системных/привилегированных окон (Win+R, диалоги открытия файлов и т.д.)
DllCall("ActivateKeyboardLayout", "UPtr", targetHKL, "UInt", 0)
}
Вот конкретно его исправления:
Конкретно добавил 3 вещи:
1. Получение сфокусированного контрола внутри окна:
autohotkey
focusedHwnd := ControlGetFocus("A")
if focusedHwnd
hwnd := focusedHwnd2. Загрузка настоящего HKL через системную функцию вместо ручного сдвига битов:
autohotkey
targetHKL := DllCall("LoadKeyboardLayout", "Str", Format("{:08X}", target), "UInt", 0, "UPtr")
if !targetHKL
targetHKL := (target << 16) | target3. Системный вызов переключения раскладки в дополнение к PostMessage:
autohotkey
DllCall("ActivateKeyboardLayout", "UPtr", targetHKL, "UInt", 0)Самое главное из этих трёх — именно пункт 3, он решает проблему с Win+R и диалогами. Остальные два — улучшения надёжности.

Решение проблемы с переключением раскладки на Windows 11