通常の.Netのtextboxなどには、ImeModeプロパティがあるので、簡単にIMEのON・OFFが出来るが、Officeのリボンのメニューに置いたeditBox(Microsoft.Office.Tools.Ribbon.RibbonEditBox)にはそれが無く、IMEを毎回手動でOFFにしなければならない。
Imm32.dllを使ったら自動に出来た。
宣言
[DllImport("Imm32.dll")] private extern static int ImmSetOpenStatus(IntPtr hIMC, int fOpen); [DllImport("Imm32.dll")] public static extern IntPtr ImmGetContext(IntPtr hWnd);
以下はPowerPointの場合。appは都合の良い場所で定義しておく。
Microsoft.Office.Interop.PowerPoint.Application app = new powerpoint.Application();
入力モードを指定したいタイミングの直前に以下が動くようにしておく。ImmSetOpenStatusの2つ目の引数は 0:OFF , 1:ON
IntPtr himc = ImmGetContext((IntPtr)app.ActiveWindow.HWND); //appのハンドルからコンテキストを取得する。HWNDはC#だとintで宣言されているが、内部的にはIntPtrのはず。 ImmSetOpenStatus(himc, 0);