改变键值要Hook GetMessage,改变WM_KEYDOWN里的扫描码。你可以开个notepad试一下。
不是Hook keyboard.很早以前就解决过了。

解决方案 »

  1.   

    楼上的兄弟哎,能具体点吗?我也曾经设法通过改变LPARAM中的扫描码来实现,可是就是不行!
    还有你说Hook keyboard很早以前就解决了,可是我看都没有实质行的解决!
      

  2.   

    不是SetWindowsHookEx(WH_KEYBOARD,....
    是SetWindowsHookEx(WH_GETMESSAGE,..
    在GetMessage的CallBack 里,
    case message 
       WM_KEYDOWN:
             //改扫描码吧。就这么简单。
      

  3.   

    同意 vcbear(一只平凡无知的熊)!!!
      

  4.   

    你的整个意图是什么?PreTranslateMessage(MSG* pMsg)中修改也可以的,
    switch(pMsg->message)
    case WM_KEYDOWN:
    pMsg->wParam中存的是十六进制的键值
      

  5.   

    不是在MFC里,而是SDK里,是通过钩子函数来修改的!to vcbear老兄:
    不行哎,倒是死了好几次机!
      

  6.   

    正好我手头有代码,就贴出来了。否则一般我会说:“修行在个人”的:)
    演示a->b
    /////////////////////////////////////////////////////////////////////////////////////////////
    //GetMessage钩子过程
    LRESULT CALLBACK GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam)
    {    MSG *pMsg = (MSG*)lParam;
    if(
    pMsg->message ==WM_KEYDOWN
     )
    {
    if(pMsg->wParam == 'A')
    {
             pMsg->wParam = 'B';
       pMsg->lParam =( (pMsg->lParam & 0xFF00FFFF)|0x00300000);
    }
    } return ::CallNextHookEx (glhGetMsgHook,nCode,wParam,lParam);
    }
      

  7.   

    to vcbear老兄:
    太感谢你了,是很实用,这个问题曾困绕我了很长一段时间,今天终于得到你老兄的帮助,实在是感激不尽,给你加分了。
    可是我还是不明白为什么用WH_KEYBOARD不能改变键值?望指点!
      

  8.   

    hook keyboard只所以没有生效,原因偶也不清楚。我也是慢慢试出来的。