Я играю с 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.