我用键盘钩子拦截到键码,想要修改用户的操作,不知道该怎么做?例如拦截到用户输入a字符,我想要最后显示的是b字符

解决方案 »

  1.   

    LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
    if (wParam == VK_F2)
    {
        wParam = VK_SPACE;
    } return CallNextHookEx(g_msg,nCode,wParam,lParam);
    }上面这段代码是试图让用户按下F2之后实际是按下的空格键~~我在debug的时候,发现wParam值已经被修改了,但是依然没有作用~
      

  2.   

    我感觉是不是系统重新复制了一个消息,发到了Hook的链中,使得你即使改变了Hook链中的wParam,也不会影响到实际程序中的值,我想是不是可以这样做,你不是拦截到键盘消息的响应了吗,这时候消息还没往目的进程传,你试着找到发出消息的进程,然后从消息对列中把产生这条击键信息的消息从消息队列中移除,然后有你的拦截程序向目标进程发送一条新的字符消息,当然发什么都有你说了算啦,不知说明白了没有。
      

  3.   

    具体怎么修改我也不清楚,但你上面这代码肯定是不会生效的
    if (wParam == VK_F2)
    {
        wParam = VK_SPACE;
    }
    wParam是个在stack里面的参数,是一份传进来的参数的拷贝,这里所做的修改只改了stack里面的值,这个修改没办法传出到系统,一退出这个函数就无效了。
      

  4.   

    具体怎么修改我也不清楚,但你上面这代码肯定是不会生效的
    if (wParam == VK_F2)
    {
        wParam = VK_SPACE;
    }
    wParam是个在stack里面的参数,是一份传进来的参数的拷贝,这里所做的修改只改了stack里面的值,这个修改没办法传出到系统,一退出这个函数就无效了。
    不过这个市在函数结束前作为参数传给CallNextHookEx了。应该是有效的
      

  5.   

    LowLevelKeyboardProc
    The LowLevelKeyboardProc hook procedure is an application-defined or library-defined callback function used with the SetWindowsHookEx function. The system calls this function every time a new keyboard input event is about to be posted into a thread input queue. The keyboard input can come from the local keyboard driver or from calls to thekeybd_event function. If the input comes from a call to keybd_event, the input was "injected". The HOOKPROC type defines a pointer to this callback function. LowLevelKeyboardProc is a placeholder for the application-defined or library-defined function name. LRESULT CALLBACK LowLevelKeyboardProc(
      int nCode,     // hook code
      WPARAM wParam, // message identifier
      LPARAM lParam  // pointer to structure with message data
    );用这个应该就可以了。不过win9x不支持