想写一个程序:在记事本上用键盘打'A',让记事本显示'B';
我现在能拦截键盘消息,也能得到记事本的句柄,我用下面方法:       wParam = 'B';(假设已探测到键盘'A' KEY_DOWN事件)
       ::SendMessage(hwnd,WM_KEYDOWN,wParam,lParam);但结果是记事本上还是写了'A',请问我该怎么办?
    先谢谢了!

解决方案 »

  1.   

    你既然可以测到按了A键,可以把这个A键的键码改成B键的,然后调用CallNextHookEx把这个改了的键盘消息传下去,等记事本收到这个消息时已经是B了
      

  2.   

    在钩子函数最后return ture;
      

  3.   

    wParam = 'B';(假设已探测到键盘'A' KEY_DOWN事件)
     ::SendMessage(hwnd,WM_KEYDOWN,wParam,lParam);
    return;不要执行后面的那个
      

  4.   

    还是不行
    我是这样写的:(片断)
    LRESULT __declspec(dllexport) CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
        HWND hwnd = GetForegroundWindow();
        if(((DWORD)lParam&0x40000000) && (HC_ACTION==nCode))
        {
           switch(wParam) //键盘按键标识
            {
                case 'A':
        {
    wParam = 'B';
    //::SendMessage(hwnd,WM_KEYDOWN,wParam,lParam);
        }break; //当字母键A被按下
                case 'B':MessageBox(0,"B","LOOK",MB_OK);break;   //test
                case 'C':MessageBox(0,"C","LOOK",MB_OK);break;
             }
         }
         LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam ); 
         return RetVal;
    }在记事本上试的时候: 按 'A' -------   记事本上显示'A'
                         按 'B' -------   记事本上显示'B',紧接着出现消息框
                         按 'C' -------   记事本上显示'C',紧接着出现消息框
    不知是哪有问题?
      

  5.   

    你的思路错了你只是做了键盘钩子
    但KEY的消息发到NOTEPAD的消息队列里去了,
    你并没有截获到它
      

  6.   

    你应该做一个消息钩子,
    钩NOTEPAD 的 WM_KEYDOWN消息
      

  7.   

    能否说的具体点
    比如说 setWindowsHookEx(?,(HOOKPROC)MessageProc,hins,0);
    中?应该是什么
    MessageProc(...) 中哪个参数可以处理消息?
    能否举一小例?