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);//行标识
}

posted @ 2009-12-03 22:23  luck_net  阅读(692)  评论(1编辑  收藏  举报