您的位置:软件 > 开发者网络 > 微软开发专栏 > Visual Studio.net专栏 > VB.net > 正文
浅议Visual Basic.NET中HOOK的应用
[文章信息]
作者:CQFZ
时间:2005-02-02
出处:天极BLOG
责任编辑:方舟
[文章导读]
本文不是讲解Hook原理的文章,仅是讨论一下在vb.net如何调用Hook功能,以及vb.net中API使用的变化问题
advertisement
热点推荐
· 迷你迅雷给IE下载加足马力
· 《大话李白》主题曲 Flash
· Windows操作系统小技巧荟萃(上)
· 新浪UC2005使用技巧四则
· Google 2秒钟搜索100G硬盘
[正文]

1 2  下一页

  本文不是讲解Hook原理的文章,仅是讨论一下在vb.net如何调用Hook功能,以及vb.net中API使用的变化问题。

  由于Hook种类较多,本文中以最常用的键盘Hook为例进行分析。

  一、先来看一下在vb中是如何实现的

  截的是空格键。表现的目标是:一个form,上面有一个textbox,不管焦点是否落在textbox里,按空格键,不会在textbox中输入一个空格,而是变成在textbox中写入一句话:“HOOK成功!”

  1.在一个Module中写入下列代码:

  调用的API的申明:

Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long

  函数说明:本函数是用于启动Hook设置。

  idHook是Hook的类型,即处理的消息类型。

  Lpfn是Hook子程(函数或过程)的地址指针。如果dwThreadId参数为0或是一个由别的进程创建的线程的标识,lpfn必须指向DLL中的Hook子程。除此以外,lpfn可以指向当前进程的一段Hook子程代码(我们利用的就是这个性质)。

  hMod是应用程序实例的句柄,标识包含lpfn所指的子程的DLL。如果dwThreadId 标识当前进程创建的一个线程,而且子程代码位于当前进程,hMod必须为NULL。

  dwThreadId是与安装Hook子程相关联的线程的标识符,如果为0,Hook子程与所有的线程关联。 返回值:函数成功则返回Hook子程的句柄,失败返回NULL。

Declare Function UnHookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long

  函数说明: 本函数是解除Hook之用。hHook是Hook函数的句柄。

Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long

  函数说明:本函数的作用是将当前Hook链中的Hook信息传递给下一个Hook。

  hHook是当前Hook的句柄,一个应用程序接收这个句柄,作为先前调用SetWindowsHookEx函数的结果。

  nCode指的是传递到当前Hook过程的Hook代码,下一个Hook过程使用这段代码去决定如何处理Hook信息。

  wParam指传递给当前Hook过程的wParam值,它的具体含义是由当前Hook链中的相关Hook的类型决定的。

  lParam指传递给当前Hook过程的lParam值,它的具体含义是由当前Hook链中的相关Hook的类型决定的。

  2. 定义的常量是:

Public hnextHookproc As Long

Public Const WH_KEYBOARD = 2 ‘这个是表明Hook的种类是键盘Hook

Public Const PM_KEY_SPACE = &H20 ‘空格键

  3.代码段

Public Sub UnHookKBD()  ‘解键盘HOOK函数
 If hnextHookproc <> 0 Then
  UnHookWindowsHookEx hnextHookproc
  hnextHookproc = 0
 End If
End Sub


Public Function EnableKBDHook() ‘设置键盘HOOK
 If hnextHookproc <> 0 Then
  Exit Function
 End If

 hnextHookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf MyKBHFunc, App.hInstance, 0)

 If hnextHookproc <> 0 Then
  EnableKBDHook = hnextHookproc
 End If
End Function


Public Function MyKBHFunc(ByVal iCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

 MyKBHFunc = 0
 If iCode < 0 Then
  MyKBHFunc = CallNextHookEx(hnextHookproc, iCode, wParam, lParam)
  Exit Function
 End If

 If wParam = PM_KEY_SPACE Then ''偵測 有沒有按到空格鍵
  MyKBHFunc = 1
 ‘加入自己的代码,用于表明响应
  form1.text1.text=”Hook成功!”
 End If
End Function

  4.在Form中的代码很简单:

Private Sub Form_Load()
 Call EnableKBDHook
End Sub

Private Sub Form_Unload(Cancel As Integer)
 Call UnHookKBD
End Sub


1 2  下一页

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • 用VB.NET结合Excel设计统计生产报表
  • VB.NET上传图片并在DataGrid中显示
  • Visual Stuido.NET扩展存储过程
  • 用VB.net实现Smartphone中进程启动
  • 在Visual Baisc.NET 2005中使用泛型
  • 寄出钱易趣说没收到 网上购物“优惠”遭质疑
  • 内地C2C网站集体对接海外 扩展两岸三地市场
  • 企业信息化时代的新兴职业:客户关系管理师
  • 诺基亚光辉岂止区区15年 CEO奥利拉不信邪
  • CN域名注册价格大跳水 将与.COM域名持平
  • 中国将制定首个国家信息化战略 年底前发布
  • 04年中国企业十大新闻揭晓 联想收购列第一
  • 跨国公司在华兴独资浪潮 欧盟与日本打头阵
  • Advertisement

    天极无线


    奇妙科幻|美好风光|清风车影|漫画卡通|星座生肖|明星写真|动物世界
    老鼠爱大米
    挥着翅膀的女孩
    女人味
    栀子花开
    白月光
    刚刚好
    江南
    快乐崇拜
    亲爱的你怎么不在我身边
    小薇
    2002年的第一场雪
    有多少爱可以重来
    我的地盘
    七里香
    情人
     
    老鼠爱大米 老板电话
    冲动的惩罚 七里香
    我不是黄蓉 女生撒娇
    盛夏的果实 坚持到底
    孤单北半球 眉飞色舞
    挪威的森林 可爱女人
    最浪漫的事 老板电话

    CSEEK搜索