vc钩子知识的详细解释和实例
Hook钩子用法:
在用hook钩子的时候,要注意的一些:
首先我们得创建钩子,分为全局的钩子和局部的钩子。
局部的钩子在程序中写钩子的过程函数就可以了。
全局的钩子,则需要在dll中写出过程函数,然后在程序中进行连接使用。
主要的函数:
SetWindowHookEx();可以设置全局或者局部的钩子
SetWindowsPos()设置窗口的位置
GetSystemMetrics()可以获取窗口的大小等等系统的资源数据
#pragma data_seg(“my section”)
………………..//设置一个变量或者多个变量为一个节,一遍所有的进程共享,对于节点中的每一个变量我们都应赋予初始值,否则所有线程不能共享这个变量。
#pragma data_seg()
#pragma comment(linker,”/section:mysec,RWS”)//将这个节设置为共享,也就是说这个节里面的所有的变量都是所有进程共享的。
GetModuleHandle()//获取当前的模块的句柄。
一下是一个关于全局钩子的dll连接库。
#include <windows.h>
HHOOK g_mhook;
HHOOK g_khook;
#pragma data_seg("mysec")
HWND g_hwnd=NULL; //设置的节点,以供所有的线程共享这个变量
#pragma data_seg()
#pragma comment(linker,"/section:mysec,RWS")
LRESULT CALLBACK mouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
return 1; //鼠标钩子,鼠标完全屏蔽
}
LRESULT CALLBACK keyProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
if (VK_SPACE==wParam)
{
::SendMessage(g_hwnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(g_mhook); //键盘钩子,屏蔽了除空格以外的所有按键,当按下空格的时
UnhookWindowsHookEx(g_khook); //侯,不管在处于激活状态的是哪一个窗口都可以退出
}
else
return 1;
}
void SetHook(HWND hwnd)
{
g_hwnd=hwnd;
g_mhook=SetWindowsHookEx(WH_MOUSE,mouseProc,GetModuleHandle("inner.dll"),0);//导出函数,这个在.def文件中应该进
g_khook=SetWindowsHookEx(WH_KEYBOARD,keyProc,GetModuleHandle("inner.dll"),0);//行标识
}