参照了很多资料.好象用钩子函数SetWindowsHookEx可以实现.试了很多回.dll也
做了.全局钩子是实现了,但是只对指定的窗口屏蔽还是实现不了!应该是要实现远程钩子,但SetWindowsHookEx的参数怎么设定也不对!!!;-(  分不够还可以加!!!!

解决方案 »

  1.   

    可以替换另一程序的窗口的窗口过程,大致这样处理: 如果窗口是顶层窗口(就是在任务栏会有图标,一般是程序的主窗口),用CWnd::FindWindow静态函数;如果是窗口控件或者子窗口,可以先找到其所在的顶层窗口,再EnumChildWindow枚举其子窗口。这些要提供窗口的窗口类名作为参数,可以用Spy++找到窗口类名。
    找到后,用SetWindowPos设置该窗口的窗口过程为你自己定义的,而SetWindowPos将返回窗口原来的窗口过程OldProc,如果你想过滤键盘消息,你可以在你的过程里不调用OldProc,其余的消息均需要调用该窗口原来的OldProc。具体实施参见SetWindowPos和WNDPROC
      

  2.   

    另一程序意味着另一进程,你需要获得另一进程的句柄,然后用次句柄对其操作,具体应为:
            调用WIN API DuplicateProcess();去捕获另一已知进程的句柄,然后再使用你所说的钩子去操作此进程。
      

  3.   

    如果你的全局钩子实现了,那应该好办,
    在钩子函数里取当前活动窗口(GetActiveWindow)
    如果是你要处理的窗口就把键盘消息截住 
    return true;
    如果不是就把消息传下去(CallNextHookEx)
      

  4.   

    如果实现了全局钩子就好办了
    当有键盘消息时用GetActiveWindow()得到活动窗口
    如果是你要处理的窗口就直接return true;
    把消息截住不发过去
    如果不是就用CallNextHookEx把消息传递下去