WM_KEYDOWN の lParam の情報って↓こんな感じであってますか?
試してみたんですけど、本当にこれでいいのかどうかわかりません。

  short nRepeat = (lParam & 0x0000FFFF);
  char nScanCode = (lParam & 0x00FF0000) >> 23;
  bool bExtendedKey = (lParam & 0x01000000) >> 24;
  bool bAltKey = (lParam & 0x20000000) >> 29;
  bool bPress = (lParam & 0x40000000) >> 30;
  bool bUp = (lParam & 0x80000000) >> 31;