c#中利用keybd_event函数+自定义软键盘实现中文输入时的问题

(一)声明外部方法

        [DllImport("User32.dll")]
        public static extern void keybd_event(byte bVK, byte bScan, Int32 dwFlags, int dwExtraInfo);

(二)首先通过切换输入法来说实现中文输入。即键盘CTRL+空格键切换输入法。

        //切换输入法
        private void changeInput()
        {
            //keybd_event函数的四个参数
            //第一个参数:虚拟键码(键盘键码对照表见附录);
            //第二个参数:硬件扫描码,一般设置为0即可;
            //第三个参数:函数操作的一个标志位,如果值为KEYEVENTF_EXTENDEDKEY则该键被按下,也可设置为0即可,如果值为KEYEVENTF_KEYUP则该按键被释放;
            //第四个参数:定义与击键相关的附加的32位值,一般设置为0即可。

            //以下通过按下Ctrl+空格键切换输入法

            keybd_event(0x11, 0, 0, 0);  //0x11---ctrl  按下
            keybd_event(32, 0, 0, 0); // 32--空格键按下
            keybd_event(32, 0, 0x02, 0);// 32--空格键弹起
            keybd_event(0x11, 0, 0x02, 0); //0x11---ctrl弹起

}

 

(三)当在中文输入状态时,在输入字母时,直接利用keybd_event模拟键盘输入,屏幕上会弹出当前使用的中文输入法的界面面板,并在其上列出可能的输入词汇。

   private static void addNumkeyINput(byte input)
        {
                    keybd_event(input, input, 0, 0);
                    keybd_event(input, input, 0x02, 0);
        }

(四)理论上,通过keybd_event输入数字键,从可能的输入中文词汇中选择相应的结果即可。问题来啦:对于微软自带的拼音输入法,无法通过keybd_event输入数字来选择,(原因??)不过还好的是,发现若使用搜狗输入法,则可以用keybd_event输入数字来选择。

 

 

 

你可能感兴趣的:(C#语言)