我想用WH_KEYBOARD HOOK实现了一个键盘捕捉(system wide),但实现以后却发现并没有达到预想的效果(只有在我的程序处于激活状态时,才能起作用,当程序最小化或非激活时,就失效了),请问这是什么原因,如何解决!!!!比如:VC下的SPY++是如何做到的?

解决方案 »

  1.   

    你做的是否为全局钩子,参考这个例子
    http://www.codeproject.com/dll/keyboardhook.asp
      

  2.   

    是全局钩子:
    SetWindowsHookEx(WH_KEYBOARD,Keyboard_Proc,g_hinstDLL,0);g_hinstDLL 是全局变量
      

  3.   

    有可能出现的情况是,g_hinstDLL为NULL,即没有成功添加到hook链中。你调试一下就知道了!
    如果是这样的话,你可是采用LoadLibrary来获得DLL的handle,
      

  4.   

    在我的Keyboard_Proc中,我调用了PostMessage函数,发出我自定义的消息
    UM_KEYBOARD,调用方法是:
    PostMessage(hwndPost,UM_KEYBOARD,wParam,lParam);
    ( hwndPost是我自己的主窗口,
      wParam,lParam是直接使用Keyboard_Proc中的两个参数)
    然后再在我的主程序中对这个消息进行处理。好象有书说,在WIN95以后就不能这样做了,但又不知改为用什么方法实现通讯了?(是WIN32下采用了Local Input State Processing 技术所造成的)
    有哪位知道的,告诉一声!!!
      

  5.   

    有可能出现的情况是,g_hinstDLL为NULL,即没有成功添加到hook链中。你调试一下就知道了!
    你可以采用动态加载DLL的方法获得g_hinstDLL,我在2000下写Hook程序的时候老碰到instDll = null
      

  6.   

    TO SoftAgent在哪调用LoadLibrary,instDLL不就是DLL本身的HMOUDLE吗?
      

  7.   

    在你调用dll的进程中你要启动HOOK之前!
    我也不明白为什么有时候instDll为null.在2000下!
      

  8.   

    在你调用dll的进程中你要启动HOOK之前!
    instDLL是DLL本身的HMODULE,但在2000下有时候为null.
    我也不明白为什么.:-)