On-screen keyboard for headed devices
In Windows 10 IoT Core, version 1809, the on-screen keyboard component has changed significantly, and for the better! IoT Core now uses the same touch keyboard components as the desktop edition of Windows.
The new keyboard implementation provides the following benefits to your headed device development:
- The entire set of Windows keyboard language layouts
- Support for input scopes (e.g., Email Address, Numeric PIN, Search Field, etc.)
- Input Method Editor (IME)
- Non-obscured text input fields
- Dictation mode
- A selection of user interface preferences
For prototyping (development) images, the on-screen keyboard feature is already included, but you will need to enable it from Device Settings in the Windows Device Portal.
For commercialization, the following optional feature packages will add the on-screen keyboard to your image:
Windows keyboard language layouts
With this release, the supported language layouts have expanded to include the full set of those available in the desktop Windows edition. To allow your users to select between different language layouts, you would typically include selection UI in your application's Settings area. The following API is provided to enable your application to set the language that the on-screen keyboard will use:
Support for input scopes
In previous releases, only the EmailSmtpAddress input scope was available. In this release, the full set of input scopes is available. The following topic explains input scopes and how to use them in your applications:
Input Method Editor (IME)
This release provides an Input Method Editor, which is required for any language that has more graphemes than there are keys on the keyboard, such as Chinese, Japanese, and Korean.
Non-obscured text input fields
In previous releases, the touch keyboard might obscure the focused text field so that the user was unable to see what they were typing. This release fixes this problem by automatically scrolling the text field into view so that it's no longer obscured by the touch keyboard.
When the input language is set to the OS language, which is the default, the voice recognition input feature is available. To show the dictation button in the keyboard, refer to the following section on User Interface configuration.
User Interface configuration
The on-screen keyboard provides several configurable options for its user interface. These are configured via the registry.
During development, you can use PowerShell or
Secure Shell (SSH). For creating an OEM image, the preferred mechanism for
setting registry values is the
OEMInput.xml file discussed here:
Most of the registry settings documented here will take effect while the on-screen keyboard is visible. This allows you during development to easily try different combinatations of settings values, immediately seeing the resulting changes in real time. If a setting does not take effect immediately, you will need to reboot the device in order to see the changes to the keyboard UI.
By default, the touch keyboard will use the lower 45% of the screen's height. This may appear too large or small on your device, depending on its size and resolution. You can adjust the height up to a maximum of two-thirds the height of the screen. Any value not in range will be clamped into range. Because this is specified as a floating point value, it allows for pixel-level precision. Simply apply the following formula to calculate the percentage:
percentage = (100 * <desired_pixel_height>) / <screen_height>
As an example, to change the height to 56.783%, you would set the following registry value:
set OskRootKey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\IoTShellExtension\OSK reg.exe ADD "%OskRootKey%" /v MaxHeightPercentage /t REG_SZ /d "56.783" /f
or from PowerShell:
set OskRootKey "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\IoTShellExtension\OSK" cd $OskRootKey Set-ItemProperty -Path . -Name MaxHeightPercentage -Type String -Value 56.783
The registry value type must be a String (
REG_SZ), so that the fractional values can be represented with.
a decimal point. Using DWord (
REG_DWORD) will not work, even for whole number percentages.
The remaining set of preferences is String values in the Preferences subkey:
|Registry Value||Default Value||Description|
|AudioFeedback_Disabled||"0"||"0" enables the key click audio feedback; "1" disables it.|
|Dictation_Disabled||"1"||"0" shows the dictation (voice recognition) button; "1" hides it.
(see note below)
|KeyboardModeEnabled_full||"0"||"0" disables the full keyboard mode; "1" enables it.|
|KeyboardModeEnabled_narrow||"1"||"0" disables the narrow keyboard mode; "1" enables it.|
|KeyboardModeEnabled_wide||"1"||"0" disables the wide keyboard mode; "1" enables it.|
|ModeOrder||"wide;narrow;full"||The order (from left to right) in which the modes are listed in the mode drop-down menu, if enabled|
|SettingsMenuKey_Collapsed||"0"||Hides the mode drop-down menu. Set this to "1" if only one mode is enabled.|
|Paste_Disabled||"0"||"0" shows the Paste button; "1" hides it.
Change takes effect after reboot.
|CloseButton_Disabled||"0"||"0" shows the Close button; "1" hides the Close button
Change takes effect after reboot.
|EmojiKeyEnabled||"0"||"0" hides the Emoji key; "1" shows it, allowing the user to enter Emoji characters.|
Dictation mode requires a speech package to be installed for the selected input language, as well as an audio input device. If a matching speech packages is not installed, the dictation button will not be shown.
All images include the en-US speech language. Other speech packages are installed as optional features. For more information about IoT Features, see IoT Core Feature List and IoT Core manufacturing guide.
As an example, to enable only
wide keyboard mode, in PowerShell you could do the following:
set OskRootKey "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\IoTShellExtension\OSK" cd $OskRootKey mkdir Preferences cd Preferences Set-ItemProperty . -Name KeyboardModeEnabled_full -Value "0" # Optional, since the default is "0" Set-ItemProperty . -Name KeyboardModeEnabled_narrow -Value "0" Set-ItemProperty . -Name KeyboardModeEnabled_wide -Value "1" # Optional, since the default is "1" Set-ItemProperty . -Name SettingsMenuKey_Collapsed -Value "1"