2011-09-05 61 views
0

我試圖用通過wParam中提供的虛擬鍵碼,但是這並不能很好地工作:確定關鍵唯一從WM_KEYDOWN消息

  • 映射到相同鍵代碼
  • 某些鍵是多個按鍵在所有
  • 虛擬按鍵無法識別似乎適應

然後我看到的lParam會給我一個掃描碼與「擴展」沿着鍵盤佈局(這是我不希望/需要)國旗,whi CH似乎這樣當計算出在鍵盤上每一個按鍵產生一個不同的值:

value = (lParam & 0x01FF0000) >> 16; 

將這個值永遠是在鍵盤上相同的密鑰相同,甚至在不同的鍵盤/系統?

回答

1

對於不同的鍵盤,掃描碼可能不同。最好使用虛擬鍵碼。從http://msdn.microsoft.com/en-us/library/ms646267(v=vs.85).aspx

分配給鍵盤上的每個鍵是一個稱爲掃描 代碼唯一值,爲對鍵盤上的鍵與設備相關的標識符。 A 鍵盤在用戶鍵入密鑰時會生成兩個掃描碼 - 當用戶按下該鍵時 ,而當用戶釋放鍵時則爲另一個鍵。

鍵盤設備驅動程序解釋掃描碼並將其映射到虛擬鍵代碼,該虛擬鍵代碼是由標識密鑰用途的系統定義的與設備無關的值。