目的:解决1、BIM视图在输入框输入用户名密码时出现的无法正常输入问题;2、漫游时按AWSD键出现输入法而无法移动问题。(目前问题出现在安装搜狗输入法并使用中文输入法的情况下)
原理:通过调用Windows里的user32.dll来实现系统层级的输入法切换。
处理:在启用输入框进行输入时调用一次切换英文输入法的方法ChangeEnLanguage(),可避免出现上述问题。
特性:目前提供中文和英文两种切换方式。
源代码:
using System; using System.Runtime.InteropServices; public class IMEHelper { [DllImport("user32.dll")] private static extern bool PostMessage(int hhwnd, uint msg, IntPtr wparam, IntPtr lparam); [DllImport("user32.dll")] private static extern IntPtr LoadKeyboardLayout(string pwszKLID, uint Flags); private static uint WM_INPUTLANGCHANGEREQUEST = 0x0050; private static int HWND_BROADCAST = 0xffff; private static string en_US = "00000409"; //英文 private static string cn_ZH = "00000804"; //中文 private static uint KLF_ACTIVATE = 1; //调用此方法时,将切换成英文输入法 public static void ChangeEnLanguage() { PostMessage(HWND_BROADCAST, WM_INPUTLANGCHANGEREQUEST, IntPtr.Zero, LoadKeyboardLayout(en_US, KLF_ACTIVATE)); } //调用此方法时,将切换成中文输入法 public static void ChangeCnLanguage() { PostMessage(HWND_BROADCAST, WM_INPUTLANGCHANGEREQUEST, IntPtr.Zero, LoadKeyboardLayout(cn_ZH, KLF_ACTIVATE)); } }