注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

yeye55的博客

编程就象品一杯清茶,清淡却又深厚。

 
 
 

日志

 
 
关于我

宅男一只,喜欢编程。没事的时候就喜欢抱着电脑看看电影、看看动漫、听听音乐、打打网游、逛逛论坛。清静的时候喜欢专研编程技术,但是发现自己至今仍然只是一只三脚猫。

网易考拉推荐

一个简单的按键钩子程序  

2011-11-05 11:17:30|  分类: 辅助程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

  本文最早于2009年5月30日在编程论坛(programbbs.com)上发表,页面地址:http://programbbs.com/bbs/view12-20797-1.htm 。

  写了一个简单的按键钩子程序。这个钩子程序主要用以转发按键消息,包括键盘按键和鼠标按键。本程序可以指定一个需要转发的按键消息。本程序在钩到相应的消息后会向指定的窗口发送指定消息。其中wParam为按键的虚键码,lParam为1时表示该键被按下,lParam为0时表示该键被放开。注:鼠标按键的虚键码为左键:VK_LBUTTON、右键:VK_RBUTTON、中键:VK_MBUTTON。核心程序以一个DLL格式文件提供,该文件只引出两个函数如下:

  procedureMKLoadHook(Wnd : HWND; Msg : UINT; Key : Integer; Hook : Integer); stdcall;

  该函数用于装载盘钩子,其中Wnd表示转发消息时要发送的窗口句柄;Msg表示要发送的消息;Key表示要转发的按键消息,等于KEYALL时表示转发所有按键消息;Hook表示钩子的类型,包含HOOK_MOUSE标志时表示要装载鼠标钩子,包含HOOK_KEYBOARD标志时表示装载键盘钩子。在钩子钩到按键消息后会向Wnd窗口发送Msg消息。

  procedureMKFreeHook; stdcall;

  该函数用于卸载钩子。

  在自己的程序中调用上述DLL文件中的函数就可以实现按键钩子的功能。其中函数相关声明的示范代码如下:

const
    WM_MOUSEKEYHOOK =  WM_USER+1;
type
  TForm1 = class(TForm)
    ... 省略部份代码 ...
  public
    procedure  WMMouseKeyHook(var Message: TMessage); message WM_MOUSEKEYHOOK;
  end;
const
    MKHOOK_DLL =  'Project1.dll';
    KEYALL = $7FFFFFFF;
    HOOK_MOUSE = 1;
    HOOK_KEYBOARD = 1 shl  1;
procedure MKLoadHook(Wnd : HWND; Msg :  UINT; Key : Integer; Hook : Integer); stdcall; external MKHOOK_DLL name  'MKLoadHook'; //装载钩子
procedure MKFreeHook; stdcall; external  MKHOOK_DLL name 'MKFreeHook'; //卸载钩子

  具体的使用代码在示范程序中有,这里就不多说了。在下面的压缩包中是一个项目组,双击ProjectGroup1.bpg打开,其中包含了一个DLL项目和一个EXE项目。DLL项目中的MouseKeyHook.pas文件是钩子程序的源代码。DLL项目编译后产生的Project1.dll文件就是钩子核心文件。注意:要使钩子在全局范围内有效,钩子核心文件必需以DLL文件方式存在。项目组中的EXE项目是示范程序,示范了如何调用Project1.dll文件。

  项目文件下载(点这里

  评论这张
 
阅读(432)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017