2015-04-03 21 views
1

我正在嘗試使用VkKeyScanW函數將字符轉換爲相應的虛擬鍵代碼。它適用於ASCII字符,但在傳遞Unicode字符(中文/俄文字符)時失敗。爲什麼VkKeyScanW爲unicode字符返回-1?

short vcode = VkKeyScanW(ch); //ch is of wchar_t type; 
cout<<"key code:"<<vcode<<endl; //always prints -1 for unicode characters. 

我在這裏做錯了什麼?有沒有其他方法可以實現它?我想將虛擬鍵碼傳遞給SendInput函數。

VkKeyScanW function documentation

回答

2

VkKeyScan() documentation說:

平移一個字符對應的虛擬鍵碼和當前鍵盤移位狀態

...

返回值

...

如果函數沒有密鑰轉換到傳遞的字符代碼,無論是低位和高位字節包含-1。

很明顯,它無法在您傳遞Unicode字符的當前鍵盤佈局中找到匹配的鍵碼。

請嘗試使用LoadKeyboardLayout()VkKeyScanEx()而不是,確保選擇中文/俄文鍵盤佈局。

還銘記保持這種VkKeyScanW()VkKeyScanExW()只接受1 WCHAR作爲輸入,但像中國語言通常需要2個WCHAR值作爲代理對一起工作,形成一個Unicode字符。這些字符不適用於VkKeyScan/Ex()

也就是說,您不需要將Unicode字符轉換爲虛擬鍵碼以便使用SendInput()。它可以使用其KEYEVENTF_UNICODE標誌直接接受Unicode字符。在代理對的情況下,您只需指定兩個輸入事件,每個事件WCHAR