Partager via


Custom Soft Input Panel (SIP) for Pocket PC

SIP - Soft Input Panel is the term used to describe the popup software keyboard provided on Pocket PC devices to simplify input. SIP's are generally 80 pixels high and shown at the bottom of the screen just above the menu bar.

'Can I write and install a custom SIP?' - I haven't had this question for some time so I thought it would be interesting to post about it. This was one of my very first bits of code for Pocket PC way back in 2000 and it still works now: ok, so I had to rebuild the project structure around it to support eVC 4.0, but no code changes. Right now you can only write custom SIP panels in native C++ code, and I would recommend using ATL as it will provide all the nasty COM plumbing for you (plus I always like to see lots of multiple inheritance in my code - makes me feel superior :) ).

Soft Input Panels are just COM objects that implement the IInputMethod interface and optionally the IInputMethod2 interface. Check out this MSDN article for more detailed information on the interface methods. The component registration is done by adding a new string value to the class registration details: CLSID\{MYGUID}\IsSIPInputMethod="1". No need to reboot the device, just go into setings|Personal|Input and select the new input method from the list.

I have put my sample project in zip form up here (disclaimer applies). You will need EVC 4.0 (SP2 to target Pocket PC 2003, SP3 to target PPC 2003 Second Edition) installed on your dev machine to compile this. It works just as well in the emulator. There are a couple of minor drawing issues with the code I have seen, maybe I will get round to fixing them up sometime).

Marcus

Comments

  • Anonymous
    February 10, 2005
    Is there any way i can have a letter recognizer, but in the numbers area, number buttons? Keyboard for numbers and recognizer for letters. It would be much faster. Also, can it be a little smaller? It takes to much screen space.

  • Anonymous
    February 10, 2005
    The comment has been removed

  • Anonymous
    February 10, 2005
    To bring the question up to date:

    "can I write and install a custom SIP in .net?"

  • Anonymous
    February 10, 2005
    Good question Doug. The answer is unfortunately No.

    Probably more enlightening would be to answer the 'why not?' question. I will post separately about this but in short, unlike the desktop framework, Compact Framework cannot be 'hosted' in a native process e.g. a system process that started with a native exe cannot load a managed dll.

    Marcus

  • Anonymous
    February 24, 2005
    I would like to make Block Recogniezer recognize polish letters. Is there source of it available? That way I could only add a few routines to missing letters.

  • Anonymous
    March 07, 2005
    I created my own numeric keyboard but I don't know how to send DELETE key char. I can send ENTER and BACKSPACE, but not composed key chars. Do you know how can do it ?

    thanks

  • Anonymous
    May 02, 2005
    The default SIP keyboard is able to track the mouse movement when you tap inside the SIP and drag outside of it (try it).

    I'm having a problem with my SIP in that if you tap on the SIP and then drag outside of it, the MouseMove or MouseUp events occur outside of the SIP area. So, I don't get the events.

    Obviously the default keyboard is able to handle this. Any idea how?

  • Anonymous
    June 29, 2005
    I am try buil it in eVC++3.0 but have this error:
    NewSIP.obj : error LNK2001: unresolved external symbol _IID_IInputMethod
    X86Dbg/NewSIP.dll : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.

    How can I fix it. And in eVC++3.0 can not use IIMCallback2, I had include <sip.h> but can not use this class.

  • Anonymous
    August 22, 2005
    Is it possible to change the size of the custom SIP to make the input panel larger, and therefore have bigger keys?

  • Anonymous
    August 29, 2005
    I have made my own Input Panel which works fine. Now I have just tried to undock it, which also works perfectly, but all the other IM's on my PDA are missing the lower 26px or so. This also happenes when my custom IM is not installed. Have anyone encountered this before. I'm programming for PPC 2003 (have sp2). Same thing happenes both with my Dell and Symbol PDA.

  • Anonymous
    March 02, 2006
    How to convert a SIP for non VGA device into a SIP for VGA devices. When I try deploying the nonVGA SIP on my VGA device the SIP appears to be very small. Any Clue?

  • Anonymous
    April 17, 2006
    Hello, I need some  help for SIP:
    1. I cannot run/display SIP in eVC4 Emulator-2. There is no sip.h in the libraries folder
    3. I'd like to write and add no-US keyboard layout to WinCE 4.2 build - how could I do this- program or/and dll?

    Thanks.

  • Anonymous
    June 07, 2006
    I've made a SIP based on the example, and it works fine PPC2003 (not on PPC2003SE and WM5.0). The width of my SIP is less than the width of the PDA screen. On PPC2003 the space on the side of the SIP is shown as transparant, but on PPC2003SE and WM5.0 it is shown as white. What has changed, and how can I fix it?

  • Anonymous
    September 01, 2006
    hi evrybody, I found a litle example for sip in evc and it is compile but I don't know how register in pda help me

  • Anonymous
    February 11, 2007
    Can i replace the SIP icon appearing on the soft key bar with a custom icon/bitmap ??

  • Anonymous
    May 19, 2007
    Do you have any sample which support hardware keybaord? It seems that every keypress sends the character straight away. I need to capture the keypress and do some procssing before send to the application

  • Anonymous
    February 18, 2008
    The comment has been removed

  • Anonymous
    October 01, 2009
    Hi, Did you ever figure how to debug the SIP DLL? Thanks. Regards, John