151  
查询码:00000456
在Windows下中英文输入法切换功能
作者: 王元超 于 2020年05月21日 发布在分类 / BIM组 / BIM视图 下,并于 2020年05月21日 编辑

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


 推荐知识

 历史版本

修改日期 修改人 备注
2020-05-21 17:40:45[当前版本] 王元超 格式调整
2020-05-21 17:36:33 王元超 创建版本

知识分享平台 -V 4.8.7 -wcp