挂窗的例子?

时间:2011-07-29 10:54:49

标签: .net winapi c#-2.0 hook

我想挂钩另一个程序的窗口,所以我可以在光标进入窗口时获取。怎么做?我知道它与SetWindowsHookEx有关但我找不到一个例子(即使是原生的)。我在C#2.0中这样做,但如果有办法我可以使用本机dll。挂钩WM_PAINT或某种循环方法也可以完成这项工作。

2 个答案:

答案 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仍然可以正常工作。