我想挂钩另一个程序的窗口,所以我可以在光标进入窗口时获取。怎么做?我知道它与SetWindowsHookEx有关但我找不到一个例子(即使是原生的)。我在C#2.0中这样做,但如果有办法我可以使用本机dll。挂钩WM_PAINT或某种循环方法也可以完成这项工作。
答案 0 :(得分:1)
您可能想要在WM_NCHITTEST上设置一个挂钩,只要鼠标在窗口上移动就会发送该挂钩。您只需要获取窗口句柄,然后使用WH_CALLWNDPROC调用SetWindowsHookEx。你的CallWndProc钩子应该是这样的:
LRESULT CALLBACK CallWndProc( int nCode, WPARAM wParam, LPARAM lParam ) {
if( nCode < 0 ) {
return CallNextHookEx( NULL, nCode, wParam, lParam );
}
CWPSTRUCT* pCWP = ( CWPSTRUCT* )lParam;
switch( pCWP -> message ) {
case WM_NCHITTEST: {
...
return CallNextHookEx( NULL, nCode, wParam, lParam );
}
default:
return CallNextHookEx( NULL, nCode, wParam, lParam );
}
}
您也可以尝试使用WH_MOUSE设置SetWindowsHookEx。
答案 1 :(得分:0)
无需使用SetWindowsHookEx。您可以通过subclassing挂钩窗口。
如果你想为每个窗口安装这个钩子,那么你可能想重新考虑这个方法,但是所有这些,EnumWindows仍然可以正常工作。