在Win16中,调用SetCapture后可以得到所有的鼠标消息。
但在Win32中,SetCapture只对本进程创建的窗口有效,对其他进程的窗口无效: 即一旦鼠标移到了其他进程的窗口,你依然收不到鼠标消息。 但有一个特例,即按住鼠标键不放时,对所有系统的窗口都有效。 换句话说,假如你在WM_LBUTTONDOWN时调用SetCapture, 然后按住鼠标左键移动到其他窗口上,那么即使窗口是别的进程的, 你的窗口依然可以收到WM_MOUSEMOVE和WM_LBUTTONUP消息。 这样在WM_LBUTTONUP时你就可以得到鼠标所在的窗口句柄。 使用这种方法可以避免使用SetWindowsHookEx。Spy++用的正是这种方法。
|