#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);
}
Отлов WM_MOVING и WM_SIZING.
DLL
Код:
Сама программа
Код:
#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;
}
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. Ничего не помогает. Как лечить?
Если что в аттаче исходники.
Долго проверял и так, и сяк: действительно не работает, хотя всё написано вроде бы правильно. Может, в последних версиях Windows такой перехват просто не возможен? Извини, что не даю полезной информации, но, по крайней мере, ты знаешь, что такое не только у тебя.
Скорее всего эти сообщения доходят до процедуры окна в обход очереди сообщений, что, кстати, не удивительно, т.к. обрабатываться они должны сразу.
Понятно, что хук не панацея. Может кто знает другой способ?
Попробуй другой хук. WH_CALLWNDPROC или WH_CBT, например.
Читать умеешь? Уже пробовал.
Пардон, был невнимателен.