我想写一个键盘钩子,在回调函数中不知道怎么写.其中在回调函数中实现以下简单功能:
1,获取所有键盘消息;
2,储存在消息队列里;
3,然后转发到进程
4,要求用POSTMESSAGEA(_),SENDMESSAGEA()和GETKEYBOARDSTATE()这些API.
在钩子中并不需要任何键进行处理,因为键值我是在调用的程序中另外实现的.
谢谢了,因为以前没有用过这些东东,希望大家帮忙一下!~^_^

解决方案 »

  1.   

    coolcjw (蝎子):  先帮你顶一下
      

  2.   

    对消息钩子不太熟悉,如果是我的话,就直接把GetMessage截下来
      

  3.   

    LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
    //不必储存消息
      SendMessage(进程handle,MSG,wParam,lParam);
    }
      

  4.   

    看下面的例子代码:
    利用键盘钩子开发按键发音程序
    http://www.vckbase.com/document/viewdoc/?id=271
      

  5.   

    我有一个截获所有消息的例子,如果有兴趣话给我发邮件[email protected]
      

  6.   

    我觉得好像不用键盘钩子也可以实现,如果主程序不大,写个钩子就不值了,用函数
    PreTranslateMessage就可以实现捕捉键盘的功能。
      

  7.   

    使用WH_KEYBOARD_LL全局钩子,将其写到EXE中,并将钩子处理函数指向EXE中的一个处理函数。
      

  8.   

    //this code logs all keyboard strike,if you want to post it to appointed process, use 
    WM_COPYDATA message.
    extern “C" __declspec(dllexport) 
    LRESULT CALLBACK KeyboardProc(
      int nCode,       
      WPARAM wParam,  //虚键代码
      LPARAM lParam   // 击键消息的信息
    )
    {
    if(lParam&0x80000000)  
    {//如果某键按下
    buffer=MapVirtualKey(wParam,2);
        // 把虚键代码变为字符
    //输出到文件
    fl=fopen( “keyfile.txt", “a+" );
    fwrite(&buffer, sizeof(char), 1, fl);
    fclose(fl);
    }
    return CallNextHookEx(hHook,nCode,wParam,lParam);
    }
      

  9.   

    用keyboard hook,把按键消息都写入文件,就可以得到所有按键消息了
      

  10.   

    PreTranslateMessage可以捕获到非本程序的消息吗?