| 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] 下一页 |