美好的一天。有需要監視鍵入的文本,即沒有按鍵,但是派生的字符。Windows鍵盤記錄。 WM_CHAR消息在各種應用程序中的特徵
在開始時,我使用原始輸入法獲取按下按鍵的虛擬按鍵代碼,但由於未能將虛擬按鍵代碼正確轉換爲字符,因此必須放棄此決定。
MapVirtualKeyEx + LoadKeyboardLayout - 沒有給出所需的效果,即如果通過調用LoadKeyboardLayout加載俄羅斯佈局,則MapVirtualKeyEx仍然返回代碼0x41的拉丁語A.
於是我開始使用hook WM_GETMESSAGE。
if (nCode < 0)
return CallNextHookEx(NULL, nCode, wParam, lParam);
// WH_GETMESSAGE
if (nCode == HC_ACTION)
{
PMSG pMsg = (PMSG)lParam;
if (pMsg != NULL)
{
if ((pMsg->message == WM_CHAR)||(pMsg->message == WM_UNICHAR))
{
keyEntry.character = pMsg->wParam;
ipc->SendData(&keyEntry, sizeof(CHARENTRY));
};
};
};
return CallNextHookEx(NULL, nCode, wParam, lParam);
一切工作正常,包括與死鑰匙的字符。
但是,當我試着輸入一個Visual Studio的編輯文本,問題發生:
- 對於一個按鍵來了兩個相同的消息WM_CHAR;
- 對於西里爾文字符,值WM_CHAR-> wParam與鍵入的字符不匹配,對於拉丁語 - 沒事。
如何將虛擬鍵碼轉換爲考慮輸入文字輸入語言的字符+能夠招募複合字符(例如:ô)。或者告訴我如何用鉤子解決版本中的問題。預先
感謝)