イネマルのプログラミング備忘録

趣味プログラマーのメモ

C# + DXライブラリ でIMEが動作しなくなる現象の回避方法

f:id:inemaru:20151125141302p:plain

C#+DXライブラリで IMEが無効化されてしまう現象

C#のWindowsFormApplicationとDXライブラリのC#用dllを使い
フォーム上でテキスト入力ができるコントロールを使うと
”ImeModeをOnにしてもIMEが無効化されてしまう”
現象にハマり・・・
とりあえず解決方法だけわかったので備忘録行き。

結論

”MakeKeyInput関数を呼ぶ!”

確認用のプログラム

注意点としては、DxLib_Init関数よりも後にMakeKeyInput関数を呼ばないと効果がないという点です。

※動作確認は、VS2013で行いました

namespace CSFormApp
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.Manual;
            this.Location = new Point();
            this.StartPosition = FormStartPosition.CenterScreen;
            DX.SetOutApplicationLogValidFlag(0);
            DX.SetUserWindow(this.Handle);
            DX.DxLib_Init();
            // IMEを有効にする為の裏技
            DX.MakeKeyInput(0, 0, 0, 0);
        }
    }
}

あとがき

DXライブラリ内で呼ばれるAPIの関係で
こういった現象が起こっていると思われます。(たぶん)

とにかく
DX.DxLib_Init();より後にMakeKeyInput関数をを呼べばIMEが有効になるので、

とりあえず使えるようにするのであれば、
DX.MakeKeyInput(0, 0, 0, 0);
コンストラクタやフォームロード時に呼べば解決します。