public static void SetImeStatus(ImeMode imeMode, IntPtr handle) { if (imeMode == ImeMode.Inherit) { return; } if (imeMode == ImeMode.NoControl) { return; } ImeMode[] inputLanguageTable = ImeModeConversion.InputLanguageTable; if (inputLanguageTable == ImeModeConversion.UnsupportedTable) { return; } int num = 0; int sentence = 0; if (imeMode == ImeMode.Disable) { Disable(handle); } else { Enable(handle); } switch (imeMode) { case ImeMode.NoControl: case ImeMode.Disable: return; case ImeMode.On: imeMode = ImeMode.Hiragana; goto Label_0079; case ImeMode.Off: if (inputLanguageTable == ImeModeConversion.JapaneseTable) { break; } imeMode = ImeMode.Alpha; goto Label_0079; case ImeMode.Close: break; default: goto Label_0079; } if (inputLanguageTable == ImeModeConversion.KoreanTable) { imeMode = ImeMode.Alpha; } else { SetOpenStatus(false, handle); return; } Label_0079: if (ImeModeConversion.ImeModeConversionBits.ContainsKey(imeMode)) { ImeModeConversion conversion = ImeModeConversion.ImeModeConversionBits[imeMode]; IntPtr ptr = UnsafeNativeMethods.ImmGetContext(new HandleRef(null, handle)); UnsafeNativeMethods.ImmGetConversionStatus(new HandleRef(null, ptr), ref num, ref sentence); num |= conversion.setBits; num &= ~conversion.clearBits; UnsafeNativeMethods.ImmSetConversionStatus(new HandleRef(null, ptr), num, sentence); UnsafeNativeMethods.ImmReleaseContext(new HandleRef(null, handle), new HandleRef(null, ptr)); } }