

It took me much time and headache, but Thanks to Alexei and Torvin I finally got it working on Win 10 1709. Update: per comments, I believe that tabtip.exe is the COM server for the COM component in question, so if your code gets REGDB_E_CLASSNOTREG, it should probably run tabtip.exe and try again. Marshal.ReleaseComObject(uiHostNoLaunch) Var tipInvocation = (ITipInvocation)uiHostNoLaunch Var uiHostNoLaunch = new UIHostNoLaunch() Here's the C# version as well: class Program Hr = CoCreateInstance(CLSID_UIHostNoLaunch, 0, CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER, IID_ITipInvocation, (void**)&tip)

Int WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) Virtual HRESULT STDMETHODCALLTYPE Toggle(HWND wnd) = 0 Here's a minimal example in C that obviously lacks some error checks. I tested this in Windows 8.1, Windows 10 & Windows 10 Anniversary Edition and it works perfectly.

I'm not too familiar with COM, but this looks like a bug. I also noticed that explorer never calls Release() on the obtained instance. So I believe the instance should not be cached. Please note that explorer creates an instance of ITipInvocation on every button click. As the name suggests, the method either shows or hides the keyboard depending on its current state. OK, I reverse engineered what explorer does when the user presses that button in the system tray.īasically it creates an instance of an undocumented interface ITipInvocation and calls its Toggle(HWND) method, passing desktop window as an argument. PostMessage(TrayButtonWindow, WM_LBUTTONUP, 0, $00010001) Īnother thing I found is that setting this registry key restores old functionality when starting TabTip.exe shows touch keyboard HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\TabletTip\1.7\EnableDesktopModeAutoInvoke=1 PostMessage(TrayButtonWindow, WM_LBUTTONDOWN, MK_LBUTTON, $00010001) TrayButtonWindow := FindTrayButtonWindow Result := FindWindowEx(TrayNotifyWnd, 0, 'TIPBand', nil) TrayNotifyWnd := FindWindowEx(ShellTrayWnd, 0, 'TrayNotifyWnd', nil) ShellTrayWnd := FindWindow('Shell_TrayWnd', nil) Here is code in Delphi // Find tray icon window I found a workaround - fake mouse click on touch keyboard icon in system tray. Is there a way to show it programmatically?

It no longer works in Windows 10 Anniversary update the TabTip.exe process is running, but the keyboard is not shown. In Windows 8 and Windows 10 before Anniversary update it was possible to show touch keyboard by starting C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe
