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输入数字来选择。