大家有什么好的方法?
谢谢参与!
还有为什么键盘钩子很难截取到一些网上银行页面上输入的信息?

解决方案 »

  1.   

    Hook Chains:钩子链
    系统中可能同一类型的钩子不只安装一个,每个后续安装的钩子会放在钩子链的首部。钩子的调用是从钩子链头部开始的,为了保证钩子链的完整性,一般的你的钩子的回调函数要调用CallNextHookEx,以便该钩子链中后面的钩子得到调用,假如你没有使用CallNextHookEx,那么该钩子链后面的其他钩子将得不到调用。
      

  2.   

    你自己安装一个WH_DEBUG的钩子,就可以知道系统有哪些钩子了。
      

  3.   

    我试了一下,(win2000 sp4)安装了一个WH_DEBUG钩子,安装之后导致机器弹出n多错误,都是正在运行的程序的,不知道为什么
    hDebugHook = NULL;
    // Add the CallWnd hook
    hDebugHook = SetWindowsHookEx(
    WH_DEBUG,
    (HOOKPROC)DebugProc, // Hook procedure
    hInstance, // This DLL instance
    0L
    );
      

  4.   

    系统调用任何钩子之前都会先调用WH_DEBUG钩子,不管系统中是否安装了其他钩子
      

  5.   

    不需要反复安装啊,一次就够了
    http://blog.vckbase.com/bluesky/archive/2005/12/09/15787.html
      

  6.   

    我试过了,无论是先安装系统钩子还是先安装这个钩子,都没有发挥作用,不知道是什么原因?
    能不能把你的测试工程发到下面的邮箱,谢谢!
    [email protected]
      

  7.   

    我的键盘钩子是做为dll,注入到所有进程中的
      

  8.   

    我在我的BLOG上做了回答。
    那个系统钩子装上后,当你按键时会发声。
    但我的程序的窗口没有获得输入焦点时,按键会有声音发出。我的程序装上钩子后,在我的程序窗口上按键的话就没有声音了。
      

  9.   

    呵呵,我测试过了还是有声音的
    我的测试环境是:win2000 pro sp4 +VC6
      

  10.   

    KeySound.exe点击“确定”注入hodll.dll吗?还是一打开就注入了?
    /*
    两个钩子都安装上之后,1。当键盘输入焦点不在我的程序窗口上时会发声2。当键盘输入焦点在我的程序窗口上时不会发声
    */
    上面“我的程序窗口”是指Testkeyboardhook.exe的窗口,对吧?
    测试的结果是安装两个钩子之后(KeySound.exe点击“确定”、Testkeyboardhook.exe点击“安装”):如果键盘输入焦点在Testkeyboardhook.exe上时会发声,不在时却不会发声,呵呵
      

  11.   

    KeySound.exe不要点确定,直接运行钩子就安装了
    点确定的话,系统钩子就卸下来了。
    Testkeyboardhook.exe需要点installhook
      

  12.   

    我用工具查了一下,发现TestKeyBoardHook.exe中没有hodll.dll
    你的hodll.dll是注入到哪个进程中的?
      

  13.   

    如果KeySound.exe不要点确定,那在任何地方按键都有发声,不知道为什么
      

  14.   

    我这边经过实验是没有问题的。
    1。当键盘输入焦点不在我的程序窗口上时会发声2。当键盘输入焦点在我的程序窗口上时不会发声随便点Testkeyboardhook.exe的窗口,(别让它退出哦),按键还有声音吗?
    你仔细研究研究
      

  15.   

    我给你另外发一份吧,把声音改成MESSAGEBOX
      

  16.   

    已发邮件,查收,这回应该没问题了。
    现在用MESSAGEBOX代替声音。
      

  17.   

    测试通过,谢谢!
    这种方法不能阻止驱动级的hook吧?
      

  18.   

    什么叫驱动级的HOOK,驱动是驱动,HOOK是HOOK
    没办法阻止驱动的。
      

  19.   

    驱动可以做键盘过滤程序,这个你可能是很难阻止的。
    在驱动里也可以hook CallNextHook在win32k.sys中对应的函数,然后判断该钩子类型在应用层中也可以用DEBUG钩子切入到别的进程内,hook CallNexHook函数,类型的判断也很简单,不过不能完全判断出来,举个例子,要判断是否是键盘钩子,可以这样:int g_nSecondTime = 0;LRESULT WINAPI My_CallNextHookEx(IN HHOOK hhk, IN int nCode, IN WPARAM wParam, IN LPARAM lParam)
    {
    DWORD dwlParam = 0;
    DWORD *pdwlParam = NULL;
    if((DWORD)lParam)
    pdwlParam = (DWORD*)lParam;
    dwlParam = *pdwlParam;
    g_nSecondTime ++;
    if(g_nSecondTime == 1)
    {
    if(dwlParam != WM_KEYDOWN)
    {
    g_nSecondTime = 0;
    }
    }
    if(g_nSecondTime == 2)
    {
    g_nSecondTime = 0;
    if(dwlParam == WM_KEYUP)
    {
    // 这里就说明是键盘钩子了
    }
    }
    return Real_CallNextHookEx(hhk, nCode, wParam, lParam);
    }