DLL文件
/*****************hook.cpp***************/
#include <windows.h>
#include <stdio.h>
#pragma data_seg ("hook")
HINSTANCE g_hModule=NULL;
HHOOK hook=NULL;
#pragma data_seg()
#pragma comment(linker,"/SECTION:hook,RWS")
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
g_hModule = (HINSTANCE)hModule;
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
FILE *fp1;
if( (fp1=fopen("c://output.txt","a"))==NULL )
{
exit(0);
}
if(GetCurrentProcessId()==800)
{
if(nCode==HCBT_MINMAX)
{
fprintf(fp1, "threadID=%d,HCBT_MINMAX/n", GetCurrentProcessId());
}
else if(nCode==HCBT_MOVESIZE)
{
fprintf(fp1, "threadID=%d,HCBT_MOVESIZE/n", GetCurrentProcessId());
}
}
fclose(fp1);
return CallNextHookEx(hook,nCode,wParam,lParam);
}
bool WINAPI InstallHook(void)
{
hook = SetWindowsHookEx(WH_CBT, CBTProc, g_hModule, 0);
if(hook == NULL)
{
printf("error!/n");
return false;
}
else
{
printf("yes!/n");
return true;
}
}
bool WINAPI UnInstallHook(void)
{
if(UnhookWindowsHookEx(hook)) //卸载钩子
return TRUE;
else
return FALSE;
}
/*******************hook.h*************/
#ifdef Hook_Dll_API
#else
#define Hook_Dll_API _declspec(dllimport)
#endif
#include<windows.h>
Hook_Dll_API bool WINAPI InstallHook(void);
Hook_Dll_API bool WINAPI UnInstallHook(void);
应用程序
/***********test.cpp*******************/
#include< stdio.h >
#include< windows.h>
#include "c:/monitor/hook/hook.h"
int main(void)
{
bool result=InstallHook();
if(result==true)
{
printf("hook success !/n");
MSG msg;
BOOL bRet = FALSE;
while( (bRet = GetMessage( &msg,0, 0, 0 )) != 0)
{
if (bRet == -1)
{
printf("error message/n");
}
else
{
printf("right message/n");
}
}
}
else
{
// printf("error!/n");
return 0;
}
UnInstallHook();
}