一日写程序,倍感无聊,想知道到底我按了多少次键,想看看键盘和鼠标被我“折磨”了多少次。嘿嘿。
为了满足自己的好奇心,所以有了一个写一下小程序的想法。
MyDetective是一个侦测你的按键次数的一个有趣的小工具,包括鼠标左右按键和键盘上的每一个键。
想想在你写文章的时候或者写程序的时候,还可以统计出你按了多少次键,是不是很有趣呢?
下面我们就来介绍一下具体的实现吧。
其实主要的原理,就是同时运用鼠标钩子和键盘钩子,而且是全局钩子,这样才能保证你的任何按键动作都能被这个程序截获。
要做成全局钩子,最主要的就是要把钩子回调函数放在DLL里面,这样,在运用SetWindowsHookEx的时候,才能把你的DLL插入到系统每一个进程当中,这样才能截获全局范围内的消息。而我们需要做的,就是建立三个变量,分别统计鼠标左键、右键、和键盘按键的总和。必须注意的是由于这三个变量是必须共享的,所以需要建立一个数据段,把数据段的属性设置为可读、可写、可共享的属性。并在数据段中定义这三个变量,这样就可以达到目的了。好了,废话不多说了,我们马上开工,用代码来说话 :)
为了满足自己的好奇心,所以有了一个写一下小程序的想法。
MyDetective是一个侦测你的按键次数的一个有趣的小工具,包括鼠标左右按键和键盘上的每一个键。
想想在你写文章的时候或者写程序的时候,还可以统计出你按了多少次键,是不是很有趣呢?
下面我们就来介绍一下具体的实现吧。
其实主要的原理,就是同时运用鼠标钩子和键盘钩子,而且是全局钩子,这样才能保证你的任何按键动作都能被这个程序截获。
要做成全局钩子,最主要的就是要把钩子回调函数放在DLL里面,这样,在运用SetWindowsHookEx的时候,才能把你的DLL插入到系统每一个进程当中,这样才能截获全局范围内的消息。而我们需要做的,就是建立三个变量,分别统计鼠标左键、右键、和键盘按键的总和。必须注意的是由于这三个变量是必须共享的,所以需要建立一个数据段,把数据段的属性设置为可读、可写、可共享的属性。并在数据段中定义这三个变量,这样就可以达到目的了。好了,废话不多说了,我们马上开工,用代码来说话 :)
首先建立一个普通的WIN32 DLL,在其中加入以下代码,定义一个数据段".MyData",然后再定义三个变量分别用来存放和统计次数:
#pragma data_seg(".MyData")
HINSTANCE hInst=NULL;
HHOOK hKeyboard=NULL;
HHOOK hMouse=NULL;
HWND hClientWnd=NULL;
lo