WH_CALLWNDPROC /  WH_GETMESSAGE还是别的?我都用过了,总是拦截不到。
是不是WH_GETMESSAGE的过滤函数名一定要是GetMsgProc?不一定吧?搜索了一下,很多人都是捕风捉影,请拦截成功过的朋友给一个明确的答案,谢谢。

解决方案 »

  1.   

    我的写法:
    SetWindowsHookEx(WH_GETMESSAGE,myProc,glhInstance,0);
    myProc中:
    HWND hWordWnd=NULL;
    PMSG pMsg=(PMSG)lparam;
    h_tWnd=FindWindow(NULL,"***");//要拦截的目标窗体
    if(h_tWnd!=NULL&&pMsg->hwnd==h_tWnd)
    {
    if(pMsg->message==WM_PAINT)

    MessageBox(NULL,"sucess!","sucess",MB_OK);
    return 1;   
    }
    else
    {
    return CallNextHookEx(glhHook,nCode,wparam,lparam);
    }
    }
    else
    {

    return CallNextHookEx(glhHook,nCode,wparam,lparam);
    }上面的代码可以跳出我的测试对话框,但是如果我注释掉
    //MessageBox(NULL,"sucess!","sucess",MB_OK);
    被拦截窗体却依旧可以重画界面,问题在哪里?
      

  2.   

    return NULL;
    或return -1试试。
      

  3.   

    这说明你钩到了WM_PAINT,否则不会弹出对话框的。
      

  4.   

    将return 1;   改成return CallNextHookEx(glhHook,nCode,wparam,lparam);试试
      

  5.   

    return 1;   改成return CallNextHookEx(glhHook,nCode,wparam,lparam);?
    肯定不行啊 那我不是把这个消息又传递下去了
      

  6.   

    WH_CALLWNDPROC比较好,虽然你要处理WM_PAINT消息,有时可能还需要原来的过程来进行默认处理
      

  7.   

    已经拦截到消息,实现在家onpaint消息,绘制到窗口上就可以。lz,难道要做皮肤
      

  8.   

    我发现用上面代码确实已经拦截到了,但是问题在于如何return才能使得目标窗体不再收到这个消息,也就是消息在我这里丢弃