看MSDN上说WM_CHAR返回的是wParam = TCHAR,但是我发现在 大写锁定 的状态下始终返回大写,为什么呢?
有什么消息是直接能返回区分大小写的ASCII呢?

解决方案 »

  1.   

    大写状态返回大写 这是很合理的!!!想要区分   可以在wm_char检测caps lock按键状态  然后自己判断
      

  2.   

    我的键盘没问题 ,但是我调试过真的是这样
    我就直接看 wParam 的值,无论Caps Lock什么状态都是返回65(A)
      

  3.   


    if (GetKeyState(VK_CAPITAL) &0x80)
      

  4.   

    这个KEY的定义就是大写吧.LRESULT CALLBACK LowLevelKeyboardProc(_In_  int nCode,_In_  WPARAM wParam,_In_  LPARAM lParam)
    {
    if (nCode == HC_ACTION)
    {
    KBDLLHOOKSTRUCT *pKBHook=(KBDLLHOOKSTRUCT *)lParam;
    if(wParam == WM_KEYUP || wParam == WM_SYSKEYUP)
    {
    switch (pKBHook->vkCode )
    {
    case 'D':
    {这个里面,你把Case 'D'改成 case 'd' 试下呢.
    winuser.h 注释得很清楚,另外小写的ASCII应该在0x61这后面吧.
    /*
     * VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
     * 0x40 : unassigned
     * VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
     */
    那么0x61以后的定义如下.#define VK_NUMPAD1        0x61
    #define VK_NUMPAD2        0x62
    #define VK_NUMPAD3        0x63
    #define VK_NUMPAD4        0x64
    #define VK_NUMPAD5        0x65
    #define VK_NUMPAD6        0x66
    #define VK_NUMPAD7        0x67
    #define VK_NUMPAD8        0x68
    #define VK_NUMPAD9        0x69
    #define VK_MULTIPLY       0x6A
    #define VK_ADD            0x6B
    #define VK_SEPARATOR      0x6C
    #define VK_SUBTRACT       0x6D
    #define VK_DECIMAL        0x6E
    #define VK_DIVIDE         0x6F
      

  5.   

    无论Caps Lock什么状态都是返回65(A)
      

  6.   

    我不太明白你的意思,我说的61是10进制的.但是我想问的是,为什么Caps Lock什么状态都是返回65(A)
      

  7.   

    其实问题就归结为判断Caps Lock是什么状态if (GetKeyState(VK_CAPITAL) & 0x0001)
    {
      //Caps Lock 为on状态
    }