Я хочу установить глобальный хук, который отслеживает, какое приложение активно.
В своей основной программе я делаю следующее:
HMODULE mod=::GetModuleHandle(L"HookProcDll");
HHOOK rslt=(WH_CALLWNDPROCRET,MyCallWndRetProc,mod,0);
Подключаемая процедура, которая называется MyCallWndRetProc
, существует в отдельной dll, называемой HookProcDll.dll. Процедура ловушки отслеживает сообщение WM_ACTIVATE
.
Дело в том, что код застрял в строке, где я устанавливаю ловушку, т.е. в строке, где я звоню ::SetWindowsHookEx
. И тогда Windows перестает отвечать на запросы, моя панель задач исчезает, и у меня остается пустой рабочий стол. Тогда я должен перезагрузить компьютер.
Что я делаю не так, почему Windows перестает отвечать на запросы? а также
Нужно ли внедрять HookProcDll.dll в каждый процесс, чтобы установить глобальный хук, и как я могу это сделать?