Fix for Skype Switching Languages
My Skype hangs every time I’m switching input languages.
Here’s a thread on the official forum.
Microsoft knows about the problem since February 2015, still no fix.
Sometimes a workaround work, sometimes it doesn’t.
That is why I decided to fix that bug on my side.
I did not want to patch the main skype executable: doing so could fail some Skype’s integrity checks, could trigger antivirus, besides I’ll need to do that with every Skype release.
That’s why I’ve implemented in-memory patch, that only changes RAM not HDD, overwriting import address of user32.dll!CallWindowProcW API with my patched version. The downside — the effect only lasts untill skype is restarted.
I haven’t tested much, but it works on my machine :-)
And here’s a source code of the utility.
The utility sits in the notification area (previously named “system tray”) under the green palm-tree icon. When it detects you’ve launched Skype, it patches the Skype process so that Ctrl + number hotkey no longer hang it. You may add the utility to the auto-start, e.g. by making a shortcut in %AppData%\Microsoft\Windows\Start Menu\Programs\Startup folder.
Microsoft, if you’re reading this, the easiest workaround is implement WM_INPUTLANGCHANGEREQUEST message handler for your TChatRichEdit control. In that handler, call ActivateKeyboardLayout( (HKL)lParam, 0 ); and return 0 without calling DefWindowProc. I don’t know why exactly DefWindowProc hangs, or why the problem only affects Windows 10; it’s hard to tell that without having a source code.