Нужно отловить выше названные сообщения ко всем окнам системы, но что-то не ловятся. WM_MOVE, WM_SIZE ловятся, а эти нет. Вот код (MS VS 7.1)
DLL
#include <windows.h>
#include "DetectWindow.h"
HHOOK hhookGetMsg; // Значение устанавливает главная программа
HCURSOR hcurCursor;
static BOOL blah = FALSE;
BOOL WINAPI DllMain(HINSTANCE hDll, DWORD fdwReason, LPVOID lpvReserved)
{
return TRUE;
}
EXPORT LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
/* Перехватывает все сообщения всех окон */
{
MSG *msg = (MSG *) lParam; // Перехваченное сообщение
switch (msg->message)
{
case WM_SIZING:
case WM_MOVING:
MessageBox(msg->hwnd, "Ура, Товарищи!", "Ура!", MB_OK);
break;
}
return CallNextHookEx(hhookGetMsg, nCode, wParam, lParam);
}
---
Сама программа
#include <windows.h>
HOOKPROC hkprcGetMsg; // Процедура-перехватчик
static HINSTANCE hinstDLL; // Хэндл библиотеки с процедурой-перехватчиком
static HHOOK hhookGetMsg; // Хэндл хука (статиками обзываются глобальные переменные)
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
{
hinstDLL = LoadLibrary((LPCTSTR) "DetectWindow.dll");
hkprcGetMsg = (HOOKPROC) GetProcAddress(hinstDLL, "_GetMsgProc@12");
hhookGetMsg = SetWindowsHookEx(
WH_GETMESSAGE, // Перехват размерных сообщений
hkprcGetMsg, // Перехватчик
hinstDLL, // DLL перехватчика
0); // Перехватывать все потоки
// Не мешать остальным прогам работать (спать) //
while (TRUE) Sleep(100000000);
return TRUE;
}
---
Хуки уже все возможные перебрал: WH_CALLWNDPROC, WH_CBT, WH_GETMESSAGE. Ничего не помогает. Как лечить?
|