#include #define _HOOK_DLL_ #include"lab4_C_lib.h" #pragma data_seg(".SHARDATA") HWND hWnd=NULL; HINSTANCE hInstance; HHOOK hHook; #pragma data_seg() #pragma comment(linker, "/section:.SHARDATA,rws") BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { if(ul_reason_for_call == DLL_PROCESS_ATTACH) { hInstance = hModule; DisableThreadLibraryCalls(hModule); } return TRUE; } int CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam) { INT ret = CallNextHookEx(hHook,nCode,wParam,lParam); if(nCode < 0) return ret; if(nCode == HCBT_MOVESIZE) { MessageBox(0,_T("Window was moved or sized!!!"),_T("title"),MB_OK); PostMessage(hWnd,HOOK_CBT,wParam,0); } return 0; } HHOOK InstallHook(HWND hWnd) { if(::hWnd != NULL) return FALSE;//уже установили хук hHook = SetWindowsHookEx(WH_CBT, (HOOKPROC) HookProc, hInstance, 0); if(hHook != NULL) ::hWnd = hWnd; // ставим hook типа WH_CBT для системы return hHook; } void UninstallHook() { if(hWnd == NULL) return;//хук не установлен BOOL bResult = UnhookWindowsHookEx(hHook); if(bResult == TRUE) hWnd = NULL; return; }