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.

Here’s compiled binaries.

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.

January 2016