How can I hide the little keyboard popup in Windows Mobile 6.5? (c#)

Tim picture Tim · Sep 3, 2011 · Viewed 8.9k times · Source

I have an app that is essentially a wizard that goes through some dialog boxes. One of the forms has just a button on it that brings up the common "take picture" dialog.

After that picture functionality is dismissed the little keyboard icon shows up (inconveniently covering over one of my wizard buttons).

I tried setting the covered window to the fron by calling:

nextButton.BringToFront();

But that has no effect. I need to disable the little keyboard icon somehow and not sure how to do it.

Note - it is not the soft keyboard - but the image that the user clicks that will bring that up.

Note - there are no text controls on this form - there are only 4 buttons - one that initiates the CameraCaptureDialog, and a few others that control the user going to the "next" and "previous" screens.

EDIT

Given that two people were very confident their code would work, and looking at the references online I figured they might be right I figured I would elaborate on the issue since neither suggestions fix the problem.

The keyboard item seems to be a remnant left over after I select either the cancel or OK button on the menu in the "take picture"/CameraCaptureDialog.

On exiting the Dialog I seem to have the middle/keyboard menu item left over and there is nothing I seem to be able to do about it.

Here is what it looks like in the emulator (happens on emulator as well) enter image description here

Note - calling all the following have NO effect on the keyboard icon thingy hiding the button:

// nextButton is the Button on the control hidden by the keyboard icon thingy
nextButton.Focus();
nextButton.BringToFront();
nextButton.Invalidate();
nextButton.Refresh();
nextButton.Show();

Answer

Waqas picture Waqas · Sep 5, 2011

I was also looking for the solution to hide the small keyboard icon (SIP icon) and I achieved this by using the FindWindowW and MoveWindow or SetWindowPos functions of coredll.dll and user32.dll

Declare the function we are interested in:

    [DllImport("coredll.dll", EntryPoint = "FindWindowW", SetLastError = true)]
    private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    [DllImport("coredll.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);

Then find the handle to keyboard icon and call the SetWindowPos to hide it:

IntPtr hWnd = FindWindow(Nothing, "MS_SIPBUTTON");
SetWindowPos(hWnd, 1, 0, 0, 0, 0, &H80);

Useful links:

  1. P/Invoke - coredll.dll
  2. Disable keyboard icon in Windows Mobile using VB.net
  3. Manage SIP - skip to the bottom on this post and look for comments of user name Mark

EDIT

I had to modify this slightly to compile.

    const int SWP_HIDE = 0x0080;
    IntPtr hWnd = FindWindow(null, "MS_SIPBUTTON");
    SetWindowPos(hWnd, IntPtr.Zero, 0, 0, 0, 0, SWP_HIDE);