2011-10-07 31 views
3

獲取虛擬鍵碼我正在從WM_CHAR和WM_KEYDOWN消息從WM_CHAR消息

我想要做的是過濾掉WM_CHAR消息具有相同的VK_代碼爲重點文字輸入和按鍵輸入端,註定會啓用您輸入文本的控件。

EG:遊戲使用〜來啓用控制檯,通過VK_OEM3和WM_KEYDOWN完成鍵綁定,但輸入到控制檯的文本需要WM_CHAR中的文本。

由於WM_KEYDOWN首先發生,控制檯被激活,然後WM_CHAR的〜被髮送到我不想要的控制檯緩衝區。

我認爲防止這種情況的最好方法是將WM_CHAR中的VK_與控件的綁定鍵進行比較並將其過濾掉。

有沒有辦法從WM_CHAR消息中獲取VK_?

我讀了你可以把掃描碼出來的lParam在16-23位

但我不確定如何:

  1. 從LPARAM
  2. 提取掃描碼的值轉換掃描代碼到VK_正確
+0

張貼作爲一個答案,請! – 2011-10-07 05:27:10

回答

4

後我周圍的一些搞亂設法提取用下面的代碼虛擬鍵:

這段代碼獲得的lParam作爲無符號字符陣列(長度的一個字節)的地址,然後使用指針arithmatic解決第三個字節(16-23):

unsigned char scancode = ((unsigned char*)&lParam)[2]; 

此代碼從掃描碼轉換爲虛擬鍵:

unsigned int virtualKey = MapVirtualKey(scancode,MAPVK_VSC_TO_VK); 
2

也許你可以使用MapVirtualKey

我不確定如何從lparam中提取掃描碼,因爲文檔沒有聲明 - 要麼獲取整個lparam並計算該函數知道要查看哪些位,要麼使用位域結構,並且只是獲取正確的位。我認爲這些方法應該可行 - 嘗試這兩種方法應該不困難。