to zhuwenzheng
    WH_MOUSE_LL 当然可以,可是可恶的微软竟然连win98、win Me都不支持而只有NT内核的NT、2000支持呀。

解决方案 »

  1.   

    我用钩子拦截了WH_CALLWNDPROC,发现在鼠标点击切换窗口的过程中,是原窗口先收到WM_ACTIVATE消息(wParam指示失活),再收到WM_ACTIVATEAPP消息(wParam指示失活),再收到WM_KILLFOCUS消息,然后才是新窗口收到WM_MOUSEACTIVATE消息,如果新窗口对这个消息返回MA_NOACTIVATE或MA_NOACTIVATEANDEAT,则不再有其它消息;如果新窗口对WM_MOUSEACTIVATE消息的处理返回MA_ACTIVATE,则接下来新窗口还收到WM_ACTIVATEAPP消息(wParam指示激活),然后是WM_ACTIVATE消息(wParam指示鼠标激活),然后是WM_SETFOCUS消息。由此看来,在新窗口处理WM_MOUSEACTIVATE消息之前,旧窗口已经处理了WM_KILLFOCUS消息将焦点丢弃,所以对WM_MOUSEACTIVATE返回MA_NOACTIVATEANDEAT,新窗口就不会收到WM_SETFOCUS因而就将使没有窗口拥有焦点了。可恶的是,WH_CALLWNDPROC钩住的消息只能监视,不能修改也不能丢弃,因而我没法让原窗口不处理WM_KILLFOCUS消息。除非替换windows的DLL,也不知该替换哪个DLL中的哪个函数。