【发布时间】:2011-07-29 10:54:48
【问题描述】:
我想hook另一个程序的窗口,这样就可以得到光标进入窗口的时间。怎么做?我知道它与 SetWindowsHookEx 一起使用,但我找不到示例(甚至是本地示例)。我在 C#2.0 中执行此操作,但如果有办法,我可以使用本机 dll。挂钩 WM_PAINT 或一些循环方法也可以完成这项工作。
【问题讨论】:
我想hook另一个程序的窗口,这样就可以得到光标进入窗口的时间。怎么做?我知道它与 SetWindowsHookEx 一起使用,但我找不到示例(甚至是本地示例)。我在 C#2.0 中执行此操作,但如果有办法,我可以使用本机 dll。挂钩 WM_PAINT 或一些循环方法也可以完成这项工作。
【问题讨论】:
您可能希望在 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。
【讨论】:
无需使用 SetWindowsHookEx。你可以通过subclassing它来勾住窗口。
如果你想为每个窗口安装这个钩子,那么你可能想重新考虑这个方法,但无论如何,EnumWindows 仍然可以正常工作。
【讨论】: