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