Forum Discussion
Windows 11 language switch hot keys don't always work or work slowly.
Microsoft has messed up language switching hot keys since Windows 10, when hotkeys Ctrl+digit to switch to specific language stopped working.
Now I'm trying to just use alt+shift to switch languages (usually left keys). But they randomly don't work. I'm using Ukrainian and English languages and when I press alt+shift it would sometimes switch from first attempt, and sometimes it would just make languages blink and switch to second language and then to the first language back again. When I've been testing it seems like those hotkeys work only when typing slowly enough. If I'm typing a sentence that needs to have a mixture of 2 languages, I type a word, then I want to switch to a different language. But if I do that too quickly, it doesn't work for some reason.
I want to switch languages in the fastest possible way.
Is there a way to fix that and make it work properly and fast every time I just press alt+shift at the same time?
P.S. Microsoft, I didn't post a single message because of errors related to labels and you already display error "Post flooding detected (user tried to post more than 2 messages within 300 seconds)". What's wrong with you? This is straight waste of people's time when I can't get pass your not obvious requirements and you make warning that make no sence: not a single message was posted yet! Makes me hate you in such moments...
17 Replies
- win11-is-an-electron-appCopper Contributor
I have an (2?) update for this:
(1) There is an opensource tool called 'Keyman' (on website of same name), which fixes this. It is a 'bigger brother' of the windows built-in keyboard-layout manager, but as a side-effect, it is also much better and more efficienty/correctly implemented! Since I installed this, I can now switch keyboards like I _used_ to be able to do in windows, for the last 40 years.
(2) I also believe to have found the culprit for the new win-11 behaviour: It appears they are using their own UWP/WinUI framework for new windows features, and this is exactly the level of (lack of) performance that I encounter with UWP applications. TLDR - to fix it properly, they would have to stop developing their own modern UI features with the equivalent of electron :-/.
There is a third alternative if you want.. As of may 2025, it only takes about 40 lines of code, to implement keyboard layout switching in e.g. C#
So we could program our own, and just avoid using UWP..
I include a sample I made here - beware it doesn't have any UI component, so it would just set all top level windows to use a given layout:using System; using System.Text; using System.Runtime.InteropServices; using HKL = System.IntPtr; //System.Runtime class Program { private delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam); // Delegate matching EnumWindows signature [DllImport("user32.dll")] private static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam); // Import EnumWindows from user32.dll [DllImport("user32.dll", SetLastError = true)] private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount); // Import GetWindowText and GetWindowTextLength to retrieve window titles [DllImport("user32.dll", SetLastError = true)] private static extern int GetWindowTextLength(IntPtr hWnd); [DllImport("user32.dll")] private static extern bool IsWindowVisible(IntPtr hWnd); // Import IsWindowVisible to filter visible windows [DllImport("user32.dll", SetLastError = true)] public static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); [DllImport("user32.dll")] public static extern IntPtr LoadKeyboardLayout(string pwszKLID, uint Flags); static void Main() { Console.WriteLine("Enumerating top-level windows:\n"); EnumWindows((IntPtr hWnd, IntPtr lParam) => { if (IsWindowVisible(hWnd)) { int length = GetWindowTextLength(hWnd); if (length > 0) { StringBuilder sb = new StringBuilder(length + 1); GetWindowText(hWnd, sb, sb.Capacity); Console.WriteLine($"HWND: {hWnd}, Title: {sb}"); tryToChange(hWnd); } } return true; // continue enumeration }, IntPtr.Zero); } public const int WM_INPUTLANGCHANGEREQUEST = 0x0050; // #define WM_INPUTLANGCHANGEREQUEST 0x0050 public const int KLF_ACTIVATE = 0x00000001; //const uint KLF_ACTIVATE = 0x00000001; static void tryToChange(IntPtr hWnd) { HKL hkl = LoadKeyboardLayout("00000409", KLF_ACTIVATE); // "00000409" = English (US) PostMessage(hWnd, WM_INPUTLANGCHANGEREQUEST, 0, hkl); // IntPtr (LPARAM) } }
- win11-is-an-electron-appCopper Contributor
2025-late-april, this bug still here, same as OP described better than I can.
All of my win11 machines exhibit this bug. My remaining win10 machines - as with all prior win-OS - do not exhibit this bug.
Basically, keyboard-switching has been broken to be unusable for people who actually need/rely on it (hint: everybody outside US).
There may be several bugs.
(1) on my machines, the UI for this appears to "animate", the same way slow web apps are wont to do.
Which makes no sense, for a user interface interaction which must be INSTANT. I am trying to 10+ characters per second. I do not need a multi-second "movie" event while I am typing??
(2) it feels like the bug has some sort of "getFocus/leaveFocus" issue, where the keyboard-switching maybe is tied to some sort of "select confirmation", so it is not enough to navigate down to the intended keyboard-option in the select list, the selection must sort-of-be 'confirmed'? possibly by some sort of focus-ended-event? I am not sure, but it feels like it, as I can see the intended language being HIGHLIGHTED/SELECTED, but my key presses continue to type the previous other keyboard layout, suggesting that the displayed/highlighted item is not 'confirmed'..?
(3) another way to describe my suspicion: It appears as though the actual switch EFFECT is not tied to the typed-"SWITCH-NOW" key command, but instead somehow tied to that the (secondary) UI part is "updated to reflect it". Which is insane - switching of keyboard layout should be INSTANT.
I wonder if the guys at microsoft (*) understand the usecase here:
It's not like people in europe wake up on a wednesday and think "You know, today, I think I will switch to ITALIAN keyboard layout, maybe around noon..?"
We don't switch keyboard layout once per day, we switch multiple times per minute, as we e.g. switch back and forth between US layout for coding, and european layouts for any text we need to write.
(*) The product managers, the product owners, whatever else MS throws at this.
So far, what I can see is that across a YEAR - 12 months - nobody at 'the biggest software company in the world' has cared to address this?
Hello? Anyone at microsoft still using keyboards? Can you look into this at some point? Maybe allow me to code it for you?
At this point, I'm considering coding my own "switch keyboard layout" app for windows, there has been a market for such an app for 12 months now..? - pooyabaghbaniCopper Contributor
hey idk what it is but it has something to do with sticky keys just search sticky keys on search bar and turn everything on at least it worked for me
- gindlinborisCopper Contributor
pooyabaghbani What has worked for me is this: Go to Time & Language > Language & region. You will have your English and Ukranian in the right pane as horizontal bars with three dots at the right. Click on the Ukranian three dots, and in the option, menu Move up the Ukranian as above English. This seems to unlock the bug. If it locks up again just Move the English up.
- arashsystemCopper ContributorI do the same thing and the problem is solved, just change the Windows language and return to the previous state, the problem is solved (this is a new Windows bug).
- its5qCopper ContributorI've been frustratingly dealing with the same problem for weeks now. What actually causes it is probably some kind of race condition: when you release either of the keys in the shortcut it should trigger a language switch, but what happens is that when you release both keys quickly it triggers two language switches, as simple as that. Of course I hope it will be fixed soon.
- Alexei_ZavjalovCopper ContributorSame issue here. I thought something happened to my keyboard around the time I switched to Win11. None of the solutions posted here work reliably for me. It is clearly a bug in Windows 11.
- strelok372Copper Contributor
I join! And the strange is that it doesn't always happen, but when it happend I fell myself a bit angry
upd: my last try i went to input settings and disable all type-assistant + in additional settings I disabled option which could let each windows choose it's own input type and for now the problem is gone
- Alexei_ZavjalovCopper Contributor
strelok372 to me it does not change 20-30% of times when I press ctrl+shift. I see that it changes the language in the taskbar and then immediately switch back. I tried to disable all assistants and everyting you mentioned, but it didn't help in my case.
I used an online keyboard event viewer and found the sequence which leads to the language bar to fail the layout switch:I hope someone from Microsoft Windows team can look into it and check the code.
- JohnnelyIron ContributorHi, reset your language settings to their default values and then reconfigure them.
- RosenbrownCopper ContributorFirstly, ensure that the hotkeys are set up correctly in your system settings. Go to Settings > Time & Language > Language. Under the "Preferred languages" section, click on "Options" next to your language and make sure that the hotkeys are enabled and set to your preference.
- ConstantineKetskalo2165Brass ContributorWhat do you mean "ensure that the hotkeys are set up correctly"? They are. I've been trying all 3 combinations. Please check my other comment so that I don't duplicate it.
- ConstantineKetskalo2165Brass Contributor
I've been trying different keys: win+space, ctrl+shift, alt+shift. Non of those work properly. Alt+shift is conflicting with just alt and sometimes instead of language switching it changes focus to menu and when I start typing immediately after that - all kinds of random crap is happening on my PC depending on which button I press. Ctrl+shift and win+space both open UI pop-up above the tray if held for a second or two. But I don't want to hold it. I just want to switch it quickly and that's it. But then it would quickly switch to second language and back to first one in a blink of an eye within single press of those buttons. I just notice quick blinking of languages.
It's not reproducable every time though for some reason.