我在网上看到你说WH_KEYBOARD_LL 钩子不用DLL来完成,但是如果做成DLL 是不是这样啊
一、新建一个ActiveX Dll工程,名字栏里取名为SysHook 二、添加一个模块,取名为mHook,添加代码如下:
Option Explicit
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Private 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
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Type PKBDLLHOOKSTRUCT VKCode As Long scanCode As Long flags As Long time As Long dwExtraInfo As Long
End Type
Private Const WH_KEYBOARD_LL = 13
Private Const HC_ACTION = 0
Private Const WM_KEYDOWN = &H100
Private Const VK_CONTROL = &H11
Private Const VK_SHIFT = &H10
Private Const VK_MULTIPLY = &H6A
Private Const VK_ADD = &H6B
Private Const VK_SEPARATOR = &H6C
Private Const VK_SUBTRACT = &H6D
Private Const VK_DECIMAL = &H6E
Private Const VK_DIVIDE = &H6F
Private Const VK_PRIOR = &H21
Private Const VK_NEXT = &H22
Private Const VK_END = &H23
Private Const VK_HOME = &H24
Private Const VK_LEFT = &H25
Private Const VK_UP = &H26
Private Const VK_DOWN = &H28
Private Const VK_RIGHT = &H27
Private Const VK_INSERT = &H2D
Private Const VK_DELETE = &H2E
Private Const VK_F1 = &H70
Private Const VK_F12 = &H7B
Private Const VK_NUMLOCK = &H90
Private Const VK_NUMPAD0 = &H60
Private Const VK_NUMPAD9 = &H69
Private Const VK_RETURN = &HD
Private Const VK_SPACE = &H20
Private Const VK_TAB = &H9
Private Const VK_ESCAPE = &H1B
Private Const VK_BACK = &H8
Private PrevHook As Long
Public Function LowLevelKeyboardProc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim p As PKBDLLHOOKSTRUCT
Dim strKey As String
If ncode = HC_ACTION Then
Select Case wParam
Case WM_KEYDOWN
CopyMemory p, ByVal lParam, Len(p)
'过程就不写了
Case Else
End Select End If
CallNextHookEx WH_KEYBOARD_LL, ncode, wParam, lParam End Function
把工程自动建立的Class1类模块改名为cSystemHook,添加代码如下:
Public Sub Hook()
PrevHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0)
End Sub
Public Sub ReleaseHook()
Open "f:\stud.txt" For Output As #1 Write #1,strKey
Close #1
Call UnhookWindowsHookEx(PrevHook)
End Sub
编译生成DLL,做一个普通的工程,添加引用SysHook'
Option Explicit
Dim SS As cSystemHook
Private Sub Form_Load()
Set SS= New cSystemHook
SS.HOOK End Sub
Private Sub Form_Unload(Cancel As Integer)
SS.ReleaseHook
End Sub
但是没有什么预想中的效果
一、新建一个ActiveX Dll工程,名字栏里取名为SysHook 二、添加一个模块,取名为mHook,添加代码如下:
Option Explicit
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Private 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
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Type PKBDLLHOOKSTRUCT VKCode As Long scanCode As Long flags As Long time As Long dwExtraInfo As Long
End Type
Private Const WH_KEYBOARD_LL = 13
Private Const HC_ACTION = 0
Private Const WM_KEYDOWN = &H100
Private Const VK_CONTROL = &H11
Private Const VK_SHIFT = &H10
Private Const VK_MULTIPLY = &H6A
Private Const VK_ADD = &H6B
Private Const VK_SEPARATOR = &H6C
Private Const VK_SUBTRACT = &H6D
Private Const VK_DECIMAL = &H6E
Private Const VK_DIVIDE = &H6F
Private Const VK_PRIOR = &H21
Private Const VK_NEXT = &H22
Private Const VK_END = &H23
Private Const VK_HOME = &H24
Private Const VK_LEFT = &H25
Private Const VK_UP = &H26
Private Const VK_DOWN = &H28
Private Const VK_RIGHT = &H27
Private Const VK_INSERT = &H2D
Private Const VK_DELETE = &H2E
Private Const VK_F1 = &H70
Private Const VK_F12 = &H7B
Private Const VK_NUMLOCK = &H90
Private Const VK_NUMPAD0 = &H60
Private Const VK_NUMPAD9 = &H69
Private Const VK_RETURN = &HD
Private Const VK_SPACE = &H20
Private Const VK_TAB = &H9
Private Const VK_ESCAPE = &H1B
Private Const VK_BACK = &H8
Private PrevHook As Long
Public Function LowLevelKeyboardProc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim p As PKBDLLHOOKSTRUCT
Dim strKey As String
If ncode = HC_ACTION Then
Select Case wParam
Case WM_KEYDOWN
CopyMemory p, ByVal lParam, Len(p)
'过程就不写了
Case Else
End Select End If
CallNextHookEx WH_KEYBOARD_LL, ncode, wParam, lParam End Function
把工程自动建立的Class1类模块改名为cSystemHook,添加代码如下:
Public Sub Hook()
PrevHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0)
End Sub
Public Sub ReleaseHook()
Open "f:\stud.txt" For Output As #1 Write #1,strKey
Close #1
Call UnhookWindowsHookEx(PrevHook)
End Sub
编译生成DLL,做一个普通的工程,添加引用SysHook'
Option Explicit
Dim SS As cSystemHook
Private Sub Form_Load()
Set SS= New cSystemHook
SS.HOOK End Sub
Private Sub Form_Unload(Cancel As Integer)
SS.ReleaseHook
End Sub
但是没有什么预想中的效果
不过好象没有什么预计效果,我对制作DLL不大知道
能帮忙改下么