We are working on a Surface 2 based application that runs on Windows 7, but is going to be running on very large touch-based wall mounted displays. These displays will allow multiple users to be interacting with the UI at the same time, making heavy use of multi-touch.
The built-in keyboard in Windows 7 is plugged into the Surface SDK, such that it shows whenever the focus goes to a SurfaceTextBox. This is great for most uses … but we want to allow multiple users to be typing simultaneously. For this reason, we wrote our own software keyboard that we can attach to any (Surface)TextBox using an attached property. The keyboard shows up below or above (depending on available application real estate) the referenced control and supports any number of keyboards at a time.
The problem is – since a SurfaceTextBox is wired up to automatically show the built-in Windows 7 software keyboard, it ALSO shows automatically (or at least the small thumbnail button to allow the user to bring up the full keyboard) when the SurfaceTextBox gets focus.
I have been hunting all over the web for a couple days on how to disable the built-in Windows 7 keyboard. I know you can turn it off at the OS level, but our users want to be able to flip to other applications and HAVE the keyboard available to them. I found all kinds of posts about watching for SurfaceKeyboard events, hiding it immediately upon show, a couple static methods to try, etc. All to no avail.
Finally I found an MSDN article about disabling the keyboard on a Tablet PC on a per-application basis. Thought for sure this was not “related enough” to Surface, but gave it a whirl. It works!
Unfortunately, it’s based on a registry key setting, so it’s not a programmatic solution – we’ll have to add this setting into our installer.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\TabletTIP\DisableInPlace] "C:\Program Files\My App\MyApp.exe"="1"