酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows Mobile(.NET Compact Framework)でメインメニューからSIP表示(キーボード)ボタンを消す

.NET Compact Frameworkでは、MainMenuコンポーネントのキーボードアイコン(以下、SIP表示ボタン)を消す事が出来ません。そこでP/Invokeでなんとかする方法を1時間位悩んでいました。

結論から言ってSIP表示ボタンを消すのは不可能でした。知ってる人が居たら教えて欲しいです……

SHFullScreen関数をP/Invokeで使う事で、MainMenuからSIP表示ボタンを一時的に削除する事は可能です。

SHFullScreen関数を使って実装した結果

後述するコードを実装したアプリでの挙動です。初期表示時ではSIP表示ボタンは表示されていません。一見成功しているかのように思えるのですが……

SIP表示ボタンが消えている状態で、メインメニュー部分をタップすると、SIP表示ボタンが定位置に表示されます。SIPは表示されません。

次にSIP表示ボタンをタップすると、(当然ながら)SIPが表示されます。

SIPを閉じると再びSIP表示ボタンは消えます。


メインメニューからSIP表示(キーボード)ボタンを消すコード

とりあえずコードだけ置いておきます。完全に消す方法が別にあれば教えて下さい。

  [DllImport("AYGShell.dll")]
  static extern Int32 SHFullScreen(IntPtr hwndRequester, UInt32 dwState);

  public const UInt32 SHFS_SHOWSIPBUTTON = 0x0004;
  public const UInt32 SHFS_HIDESIPBUTTON = 0x0008;

  private void HideSipButton()
  {
      UInt32 dwState = SHFS_HIDESIPBUTTON;
      SHFullScreen(this.Handle, dwState);
  }

  private void Form1_Paint(object sender, PaintEventArgs e)
  {
      HideSipButton();
  }

  private void Form1_Activated(object sender, EventArgs e)
  {
      HideSipButton();
  }