目的:解决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));
}
}