【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

スーパーマリョーワールド(仮) CABインストーラ

スーパーマリョーワールド(仮)のWindows Mobile用CABインストーラを作成しました。分散するとわかりにくくなるため、以前のエントリにまとめて置きます。

操作のときに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を除外してエラーを防いでいます。