hook(钩子)
来源:互联网 发布:计算机二级考试编程题 编辑:程序博客网 时间:2024/06/11 12:49
Hook
钩子[以下简称Hook]是应用程序在Microsoft Windows 消息处理过程中设置的用来监控消息流并且处理系统中尚未到达目的窗口的某一类型消息过程的机制。如果Hook过程在应用程序中实现,若应用程序不是当前窗口时,该Hook就不起作用;如果Hook在DLL中实现,程序在运行中动态调用它,它能实时对系统进行监控。根据需要,我们采用的是在DLL中实现Hook的方式[关于HOOK更详细的资料请查阅资料]。
在VC中新建一Win32 Dynamic-Link Library 工程,工程名为KBLock。添加hook.h头文件,内容如下:
#ifdef FIRSTLIBAPI
#else
#define FIRSTLIBAPI extern "C" __declspec(dllimport)
#endif
#include <windows.h>
FIRSTLIBAPI BOOL InstallHook();
FIRSTLIBAPI BOOL UnInstallHook();
然后添加hook.cpp文件,内容如下:
#define FIRSTLIBAPI extern "C" __declspec(dllexport)
#include "hook.h"
HHOOK hhkHook=NULL; //定义钩子句柄
HINSTANCE hInstance=NULL; //程序实例
LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if (nCode < 0)
return CallNextHookEx(hhkHook,nCode,wParam,lParam);
if (nCode != HC_ACTION)
return CallNextHookEx(hhkHook,nCode,wParam,lParam);
//给出提示:键盘已经被锁定,要进行判断,看是否已有提示窗口,否则会弹个没完
if (!FindWindow(0, "KeyBoard Locked"))
MessageBox(0,"键盘已经锁定!!!","KeyBoard Locked",MB_OK);
return 1; //没有return CallNextHookEx(hhkHook,nCode,wParam,lParam)则不会把消息
//传递下去,所以我们的键盘就不起作用了
}
//导出函数:启动键盘锁定
BOOL InstallHook()
{
if(!(hhkHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)HookProc,hInstance,0)))
return FALSE;
return TRUE;
}
//导出函数:解除键盘锁定
BOOL UnInstallHook()
{
return UnhookWindowsHookEx(hhkHook);
}
//下面的DLLMain相当于Win32程序中的WinMain函数,是入口点
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
hInstance=(HINSTANCE)hModule; //得到DLL实例
return TRUE;
}
DLL方面的工作已经完成,这样我们就可以在程序中调用它了。
建一基于Dialog的工程,在其中加入一个按钮:“hook/unhook”,并添加相应的处理函数:(这里没有加入出错处理的代码)
void CHookexeDlg::OnButtonHook()
{
// TODO: Add your control notification handler code here
typedef BOOL (CALLBACK *LOADHOOK)();
typedef BOOL (CALLBACK *UNLOADHOOK)();
HINSTANCE hDLL=NULL;
LOADHOOK loadhook;
UNLOADHOOK unloadhook;
hDLL=::LoadLibrary((LPCTSTR)"hookdll"); //加载DLL
loadhook=(LOADHOOK)::GetProcAddress(hDLL,"InstallHook");
unloadhook=(UNLOADHOOK)::GetProcAddress(hDLL,"UnInstallHook");
static bool sign = true;
if(sign)
loadhook();
else
unloadhook();
sign = !sign;
}
- 钩子(Hook)
- hook(钩子)
- 钩子HOOK
- 钩子(hook)
- 钩子HOOK
- 钩子HOOK
- 钩子(Hook)
- 钩子 (Hook) Hook解释
- Hook钩子攻略
- Hook钩子攻略
- [转载]Hook钩子攻略
- 钩子(hook)
- 关于钩子(Hook)函数
- HOOK钩子详细介绍
- Hook钩子攻略
- 关于钩子函数HOOK
- hook(钩子程序)(转载)
- 钩子(Hook),基本概念
- 文件过滤驱动终于小小的理解了点,可惜没机会做,开始看看ndis
- 揪出Word2000的隐藏功能
- 使超星数字图书馆的PDG文件转换为PDF文件的方法
- Turbo C 2.0 设置详解
- Tcpdump的使用
- hook(钩子)
- 24点算法
- 电脑的发展
- 8皇后问题
- 为什么大公司的产品越做越烂
- 用Visual C#编写仿MSN Messager的滚动提示窗口
- 如何恢复系统数据库?
- 教你做一个优秀的项目经理
- DataGridView简介