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輸入數字來選擇。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章