#include<tchar.h>
#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;
}
Comments