Тип ловушки WH_CALLWNDPROCRET не работает должным образом

Я новичок в стек переполнения, и все еще новичок в C ++

Я пытаюсь разработать настольное приложение «Размытие панели задач» на C ++ для развлечения.

Но я столкнулся с очень необычной проблемой. Я перепробовал почти все, но не могу заставить это работать. Я пытаюсь подключить мое приложение с помощью SetWindowsHookEx (). В основном мне нужно ввести DLL-файл в explorer.exe в соответствии с этот урок.
Вот что у меня на данный момент:

DWORD tid = ::GetWindowThreadProcessId(hTaskbar, nullptr); // Get thread id
HINSTANCE hDll = ::GetModuleHandle(L"HookDLL.dll"); // Instantiate dll
HOOKPROC hookProc = (HOOKPROC)::GetProcAddress(hDll, "HookFunction"); // Hook procedure
hHook = ::SetWindowsHookEx(WH_CALLWNDPROCRET, hookProc, hDll, tid); // Set hook / Inject dll

Это работает нормально, если я делаю это:

hHook = ::SetWindowsHookEx(WH_MOUSE, hookProc, hDll, tid);

(Будет размыто панель задач, если я наведу курсор на панель задач.)
Но я пытаюсь использовать WH_CALLWNDPROCRET вместо WH_MOUSE, вот так:

hHook = ::SetWindowsHookEx(WH_CALLWNDPROCRET, hookProc, hDll, tid);

Когда я использую WH_CALLWNDPROCRET в качестве типа ловушки, моя функция обратного вызова в моем .dll никогда не вызывается. Вот моя функция обратного вызова:

extern "C" __declspec(dllexport) LRESULT CALLBACK HookFunction(int code, WPARAM wParam, LPARAM lParam) {
if (code < HC_ACTION || hTaskbar == NULL) {
return ::CallNextHookEx(hHook, code, wParam, lParam);
}
else {
BlurBehindON(hTaskbar); // Blur the taskbar if it is not NULL
}
return ::CallNextHookEx(hHook, code, wParam, lParam);
}

Буду признателен за любую помощь или идеи относительно того, что я мог сделать неправильно;)

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector