SetWindowsHook Global не очень Global - PullRequest
0 голосов
/ 19 января 2012

Я играю с SetWindowsHookEx, в частности, я бы хотел узнать о любом окне (на моем рабочем столе), которое было активировано, с помощью мыши или клавиатуры.

Чтениечерез документы MSDN для SetWindowsHookEx может показаться, что тип WH_CBT сделает эту работу.Я создал dll и поместил туда весь код, которым я управляю из приложения с графическим интерфейсом (который также обрабатывает отцепку).

НО, кажется, я получаю код активации только при активации моего графического интерфейсаПриложение, однако, любое другое приложение, которое я активирую, игнорируется.

В моей dll у меня есть код установки и CBTProc примерно так:

LRESULT WINAPI CBTProc(int Code, WPARAM W, LPARAM L) {
   if(Code<0) CallN....

   if (Code == HCBT_ACTIVATE) { // never get unless I activate my app
      HWND a = reinterpret_cast<HWND>(W);
      TRACE("this window was activated %d\n", a);
   }

   CallNext....
}

EXPORTED HHOOK WINAPI Setup(HWND MyWind) {
   ...
   // gDllUInstance set in dllmain
   return SetWindowsHookEx(WH_CBT, CBTProc, gDllUInstance, 0);
}

Все довольно простые вещи, я пытался переместитьустановка из dll, но я все еще получаю тот же эффект.

Может показаться, что dll загружается в другие процессы, я подсчитываю количество получаемых DLL_PROCESS_ATTACH и вижу, как они работаютвверх (не очень научно я знаю.

Обратите внимание, что это 32-битный код, работающий на 32-битной ОС - win2k3.

Не верны ли мои ожидания от механизма перехвата? я должен только получить активациюмоего приложения или мне нужен другой тип хуков?

РЕДАКТИРОВАТЬ: функция трассировки записывает в файл, сообщая мне, что посылает мне активации

TIA.

1 Ответ

0 голосов
/ 19 января 2012

Оказывается, все работает нормально, как указывает Ганс, я просто не вижу выходных данных отладчика от других процессов, если я добавлю некоторый дополнительный код трассировки - один файл трассировки на каждый присоединенный процесс - я вижу, что могу видите, что все работает в конце концов.

Большое спасибо за ответы.

...