2020-05-21 17:36:33 版本 : 在Windows下中英文输入法切换功能
作者: 王元超 于 2020年05月21日 发布在分类 / BIM组 / BIM视图 下,并于 2020年05月21日 编辑
 历史版本

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

目的:解决BIM视图在输入框输入用户名密码时出现的无法正常输入情况。(目前问题出现在安装搜狗输入法并使用中文输入法的情况下)

原理:通过调用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));
    }
}

历史版本-目录  [回到顶端]
    知识分享平台 -V 4.8.7 -wcp