我用WH_JOURNALRECORD钩子拦截输入消息 。。那如果是键盘消息,我该怎么判断,又怎么把回调函数里的参数转为按键字母?

解决方案 »

  1.   

    RESULT   CALLBACK KeyboardProc(int nCode, WPARAM wParam,LPARAM lParam)
    {
    if (((DWORD)lParam & 0x40000000) &&(HC_ACTION==nCode))
    {
    if (wParam==VK_F2) 
    {
    MessageBox(NULL,"fuck","fuck",MB_OK);

    }
    } LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam );
    return  RetVal;
    }如上,记录wParam并转换就行了.不同的数字代表不同的键.
      

  2.   

    wParam是个Long类型吧?我怎么转成字母呢?
      

  3.   

    我想在回调函数里用fout把拦截到的消息存到文本文件里。。
      

  4.   

    fl=fopen("key.txt","a+");    //输出到key.txt文件
    if (wParam==VK_RETURN)
    {
         ch='\n';
    }
    else
    {
         BYTE ks[256];
         GetKeyboardState(ks);
         WORD w;
         UINT scan=0;
         ToAscii(wParam,scan,ks,&w,0);
         //ch=MapVirtualKey(wParam,2); //把虚键代码变为字符
         ch =char(w); 
    }
    fwrite(&ch, sizeof(char), 1, fl);
    一定要把飯送到嘴巴面前麼....
      

  5.   

    用GetKeyNameText(lparam)函数转换成键名就可以了,比如按下ESC键,那么只要判断返回来的字符串是否等于“ESC”就可以