hook监视窗口

这篇博客介绍了如何创建一个DLL,使用WinAPI实现Hook技术,监视窗口的最小化和最大化事件,并将信息写入文件。DLL中的InstallHook和UnInstallHook函数分别用于安装和卸载Hook,测试程序通过调用这些函数来实现对窗口操作的监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();

 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值