游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2731|回复: 0

VB编程中钩子的实现及应用3(转帖)

[复制链接]

79

主题

288

帖子

619

积分

高级会员

Rank: 4

积分
619
发表于 2004-2-25 01:19:00 | 显示全部楼层 |阅读模式
三、实例--键盘消息的拦截

  在程序开发时常用的有对输入消息进行监视的键盘钩子,对于所监视到的消息应进行处理,下面对键盘钩子参数的具体内容组成进行说明:

  如果有键盘消息(WM_KEYUP或WM_KEYDOWN)将被处理时,则系统调用键盘钩子。

  nCode为HC_ACTION或HC_NOREMOVE,若小于0,则要求处理函数向下传递该消息。

  wParam表示按键键码常数,A键到Z键与其ASCII码的相应值'A'到'Z'是一致的,例如按C键,则wParam值为67。

  lParam与WM_KEYDOWN同,占四个字节,其包括的内容较多,其二进制结构如下:

0  1  ……  15  16  ……… 23  24  25  ……  28  29  30  31

  0-15位(Key repeat count),键码重复次数。16-23位(Scan code),按键的扫描码。24位(Extended_Key flag),扩展键(功能键、数字小键盘上的键)标志,为1则是扩展键,否则为0。25-28位被保留。29位(Context Code),状态描述码,ALT键被按下则为1,否则为0。30位(Previouskey_stateflag)指定先前的键状态,如果消息被发出之前键处于按下状态,则为1;键处于释放状态则为0。31位(Transiton_stateflag)状态转换标志,如果键是被按下值为1,如果键被放开值为0。

  本例中的钩子用来监视并记录应用程序中的按键信息。在程序中,ALT+F4组合键被屏蔽。下面是部分代码:

Public hHook as Long
Private Sub Form_Load()′程序启动时安装钩子
hHook=SetWindowsHookEx(2,Address of MyKBHook,0,App.ThreadID)
End Sub
′具体的钩子程序,本例中该过程被包含在Module1中
Public Function MyKBHook(ByVal nCode As Long,ByVal wParam As Long,ByVal lParam As Long)As Long
If nCode>=0 then
Open "C:\Keyfile.txt" For Append As #1 '将键盘的操作记录在Keyfile.txt文件之中
'记录所操作的键、操作时间、日期操作时的按键状态,用16进制记录
Write #1,wParam,Hex(lParam),Date,time
Close #1
MyKBHook=0 '表示要处理这个消息
'屏蔽ALT+F4组合键
if wParam=115 And(lParam And&H20000000)<>0 Then
if(lParam And &HC000000)=0 Then  '是否进行ALT+F4操作
MyHBHook=1 '钩子吃掉这个消息
End if
End if
End if
Call CallNextHookEx(hHook,nCode,wParam,lParam)'将消息传给下一个钩子
End Function
'程序退出时卸载钩子
Private Sub Form_Unload(Cancel As Interger)
Call Unhook WindowsHookEx(hHook)
End Sub

  四、总结

  钩子处理程序是Windows高级编程技术,一般程序员都使用VC++等程序设计工具实现,本文表明,对于VB来说,虽然很多人认为是非专业的设计工具,但实现钩子这样的高级技术也是非常方便的。另外在使用钩子时应注意到,钩子虽然功能比较强,但如果使用不当将会严重影响系统的效率,所以要尽量避免使用系统钩子,并且在不用钩子时,应将钩子及时卸载。



详细请看原文 地址:
http://www.yesky.com/SoftChannel/72342371928637440/20040223/1770523_2.shtml



[em17]
完!!!

[em21] [em21] [em21] [em21] [em21] [em21] [em21] [em21] [em21]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-14 17:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表