Software-based Input Panel (Compact 2013)


To accommodate keyboard input from a non-keyboard input device, such as an on-screen keyboard or a graphics input window, you must implement the Software-based Input Panel (SIP). The SIP framework simulates a keyboard by converting non-keyboard input that comes through an input method into keyboard events that are sent to the Graphics, Windowing, and Events Subsystem (GWES). The GWES passes the message to your application through the standard delivery system for keyboard events.

The content of the SIP window is determined by the active input method. Windows Embedded Compact provides a default QWERTY keyboard input method to handle alphanumeric input. To create a new input method, create a registered in-process Component Object Model (COM) component that implements the IInputMethod, IInputMethod2, or IInputMethod3 interface.

To add your new input method to Windows Embedded Compact, create a standard COM registry key under the registry key HKEY_CLASSES_ROOT\CLSID. For more information, see CLSID Registry Key.

The registry values can be set directly, but we recommend that your setup application self-register the new input method component by calling the DllRegisterServer and DllUnregisterServer functions. Implement these functions in the input method server dynamic-link library (DLL). For more information, see Input Method Registry Settings.

To use your new input method, the user first selects the input method from the SIP dialog box or the Input Panel. The SIP loads the selected input method dynamically by calling the CoCreateInstance function. When the user selects a different input method, the SIP frees the existing input method by calling the IUnknown::Release method on the interface pointer.

The SIP calls IInputMethod interface methods to notify the input method of events and to request data. An input method receives user input and passes the input data to the SIP through the IIMCallback interface. When you create an input method, call IIMCallback methods only in response to a call coming through an IInputMethod interface method.

Your application that uses the SIP must know the state of the SIP; for instance, whether the panel is visible, whether it is docked or floating, and its size and position. All of this data is stored in the SIPINFO structure, which is accessed through the SipGetInfo and SipSetInfo functions. When a user changes the state of the SIP, the OS notifies your application by sending out a WM_SETTINGCHANGE message, which is sent to all active applications.

To modify SIP properties such as the window display size, position, and window state, call IIMCallback::SetImInfo and pass it a pointer to an IMINFO structure that contains the desired input method settings. You adjust the SIP window display size when the OS is creating the input method by calling IIMCallback::SetImInfo. If IIMCallback::SetImInfo is not called, the OS uses default values for these properties when it creates the SIP.

To add this feature to your OS, see Software-based Input Panel Catalog Items and Sysgen Variables.

For reference information, see Software-based Input Panel Reference.

For information about sample application code, see Software-based Input Panel Samples.

Other Resources

Shell and UI