Disable SurfaceKeyboard for a Particular Application

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"

Original MSDN article

Update: here’s a screenshot of the registry with the setting in place.
Image: Disable Keyboard - Registry

Happy keyboarding…

3 thoughts on “Disable SurfaceKeyboard for a Particular Application

  1. Hello,

    I’m also working on a multi-touch project in which multiple users can type simultaneous on custom build software keyboards.
    Sending the output to the correct TextBox is not a problem.

    But I want to ask you how did you handle the focus on multiple Textboxes?
    Do you have a blinking cursor on both Textboxes?

    Thanks,
    Dries

  2. i am having the same problem but i did try to add the registry key but still can’t. can you take a screenshot of your registry key on DisableInPlace so that i can check if i did the same thing thanks

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>