Пример подключения окна? - PullRequest
0 голосов
/ 29 июля 2011

Я хочу подключить окно другой программы, чтобы получить его, когда курсор войдет в окно.Как это сделать?Я знаю, что это с SetWindowsHookEx, но я не могу найти пример (даже родной).Я делаю это в C # 2.0, но я могу использовать нативный DLL, если есть способ.Перехват WM_PAINT или некоторый метод зацикливания также сделает эту работу.

Ответы [ 2 ]

1 голос
/ 29 июля 2011

Возможно, вы хотите установить хук на WM_NCHITTEST, который отправляется всякий раз, когда мышь перемещается по окну. Вам просто нужно получить дескриптор окна, а затем вызвать SetWindowsHookEx с WH_CALLWNDPROC. Ваш хук 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 );
  }
}

Вы также можете попробовать SetWindowsHookEx с WH_MOUSE.

0 голосов
/ 31 июля 2011

Нет необходимости использовать SetWindowsHookEx.Вы можете зацепить окно с помощью подкласса it.

Если вы хотите установить этот хук для каждого окна, , то вы можете пересмотреть этот метод, но всето же самое, EnumWindows все равно будет работать нормально.

...