スーパーマリョーワールド(仮)のWindows Mobile用CABインストーラを作成しました。分散するとわかりにくくなるため、以前のエントリにまとめて置きます。
- id:n7shi:20090801
操作のときにIMEが邪魔になるため、起動時にIMEをオフにするようにしました。参考までにコードを抜粋します。
private int imeStatus; [DllImport("COREDLL.DLL")] private extern static int ImmGetOpenStatus(IntPtr hIMC); [DllImport("COREDLL.DLL")] private extern static int ImmSetOpenStatus(IntPtr hIMC, int fOpen); protected override void OnGotFocus(EventArgs e) { base.OnGotFocus(e); if (Environment.OSVersion.Platform == PlatformID.WinCE) { imeStatus = ImmGetOpenStatus(IntPtr.Zero); ImmSetOpenStatus(IntPtr.Zero, 0); } } protected override void OnLostFocus(EventArgs e) { base.OnLostFocus(e); if (Environment.OSVersion.Platform == PlatformID.WinCE) ImmSetOpenStatus(IntPtr.Zero, imeStatus); }
IMEの状態を保存しておいて、他のアプリに移るときに元に戻しています。PCにはCOREDLL.DLLがありませんが、P/Invokeは呼び出されるときに動的バインドされるため、環境チェックでPCを除外してエラーを防いでいます。