打印本文 打印本文 关闭窗口 关闭窗口
VB.net中HOOK的应用(二)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2348  更新时间:2009/4/23 19:00:37  文章录入:mintao  责任编辑:mintao
Public Enum HookType

        WH_KEYBOARD = 2

End Enum

 

    Public Sub UnHook()  ‘解Hook

        If hnexthookproc <> 0 Then

            UnhookWindowsHookEx(hnexthookproc)

            hnexthookproc = 0

        End If

    End Sub

    Public Function SetHook()  ‘设置Hook

        If hnexthookproc <> 0 Then

            Exit Function

        End If

        hnexthookproc = SetWindowsHookEx(HookType.WH_KEYBOARD, AddressOf MyKeyboardProc, 0, GetCurrentThreadId())

       我把第三个参数设为0(即NULL),表示的是此Hook的代码在此进程中。第四个参数用了一个API去取安装Hook子程相关联的线程的标识符。(参见前面的API声明)

    End Function

 

    Public Function MyKeyboardProc(ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer

        MyKeyboardProc = 0

        If nCode < 0 Then

            MyKeyboardProc = CallNextHookEx(hnexthookproc, nCode, wParam, lParam)

            Exit Function

        End If

        If wParam = PM_KEY_SPACE Then 

            MyKeyboardProc = 1

‘写入你自己的代码

frm1.textbox1.text=”HOOK成功!”

        End If

    End Function

    Sub main()

        Application.Run(frm1)

    End Sub

End Module

同时请在:

解决方案管理器-〉windowsapplication1.sln -〉右点鼠标 -〉属性 -〉通用属性->常规->启动对象 -〉改为Module1

4.在Form1中的代码:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Call SetHook()

    End Sub

    ‘vb.net中没有form_unload事件了,而是用closing

    Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

        Call UnHook()

End Sub

 

最后简单说明一下,为什么我在module1里用了Public frm1 As New Form1()这句话,及启动对象 -〉改为Module1的作法。这是由于vb.net已经是OO的了,如果你是CSDN上vb.net版的常客,你就会很熟悉这个问题,我们已经讨论过N次了。我也回过不知多少贴子来说明这一问题。由于和本文主题与篇幅所限,您要是对这个问题不明白,请先看一下:

http://www.csdn.net/expert/topic/965/965919.xml

获得一些概念。我会在后续的文章中进行更为详细和系统的介绍(其实它也是我最想先写的问题之一)。

 

结束语:关于API的调用,本文只涉及了冰山之一角,关于具体的调用变化,我会根据vb.net版上的具体情况再写相关的文章来说明的。

对了,补充一点,vb.net不再认any类型了,因此,在声明时要具体声明成你想要用的类型即可。

 

上一页  [1] [2] [3]  下一页

打印本文 打印本文 关闭窗口 关闭窗口