大家好,我目前在学习如何用键盘钩子获取按键输入。因为我在c++方面是个新手,更不用说hook这种比较高级的技术,所以在学习的过程中碰到了很大的困难。下面是我写的一段试验用的最简单的代码,是在vc6.0环境下一个win32程序。
能不能帮我分析下为什么我这个键盘钩子函数不能钩到键盘输入?(我不是全局钩子)#include<iostream>
#include<windows.h>
using namespace std;
static HHOOK hkb=NULL;LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
cout<<"abc";             
if(((DWORD)lParam&0x40000000)&&(HC_ACTION==nCode))
{

if(wParam=='R') cout<<'bbb';
}
LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam );
return RetVal;
}BOOL  __stdcall installhook()
{   
hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,0,GetCurrentThreadId());
return TRUE;
}BOOL __stdcall UnHook()
{
BOOL unhooked=UnhookWindowsHookEx(hkb);
return unhooked;
}void main()

  char a;
  installhook();
  cin>>a;
  /* 省略 */
}
问题就在红色那一步,理论上应该我输入任意按键后屏幕输出abc,但我现在无论输入什么都没反应。请问是为什么,谢谢。

解决方案 »

  1.   

    用全局键盘钩子:
    hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,0,GetCurrentThreadId()); 
    改成:
    hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hins,0);
      

  2.   

    全局的要写dll的,我还不怎么会呢。
    我现在只是想试验下,弄个最简单的。
      

  3.   

    我刚刚试过了,写成hins,0也不行,一样按上去没反应。是不是跟我的程序是win32有关系?我看人家的源代码也是这么写,不过他是那种mfc写出的程序,有程序界面的。
      

  4.   

    楼主创建的是 win32 console application 还是 windows application?
      

  5.   

    是win32程序,在cmd模式下运行的那种。
      

  6.   

    WH_KEYBOARD_LL编译通不过呀,说 undeclared identifier
    要加点什么东西么?
      

  7.   

    WH_KEYBOARD_LL编译通不过呀,说 undeclared identifier 
    ==============
    这个应该是版本控制的问题
      

  8.   

    我去搜索了下,WH_KEYBOARD_LL是在winnt里面才被安装的,应该没有什么关系。
      

  9.   

    我刚刚搜索了下,明白了,控制台的程序不能用一般的方法hook,所以钩不到。
    果然我最担心的事情发生了。