用VB实现的全局键盘钩子

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用VB实现的全局键盘钩子

2010-04-06 13:30

代码功能:实时监测Caps Lock、NumLock、Scroll Lock三个按件的状态,并显示在Label1 Label2 Label3三个标签中

'.bas模块中

Public m_hDllKbdHook As Long 'public variable holding

'the handle to the hook procedure

Public Const WH_KEYBOARD_LL As Long = 13 'enables monitoring of keyboard 'input events about to be posted 'in a thread input queue

Private Const HC_ACTION As Long = 0 'wParam and lParam parameters

'contain information about a

'keyboard message

Public Const VK_CAPITAL As Long = &H14

Public Const VK_NUMLOCK As Long = &H90

Public Const VK_SCROLL As Long = &H91

Private Const LLKHF_UP As Long = &H80& 'test the transition-state flag

Public Type KeyboardBytes

kbByte(0 To 255) As Byte

End Type

Private Type KBDLLHOOKSTRUCT

vkCode As Long 'a virtual-key code in the range 1 to 254 scanCode As Long 'hardware scan code for the key

flags As Long 'specifies the extended-key flag,

'event-injected flag, context code,

'and transition-state flag

time As Long 'time stamp for this message

dwExtraInfo As Long 'extra info associated with the message

End Type

Public 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

Public Declare Function UnhookWindowsHookEx Lib "user32" _

(ByVal hHook As Long) As Long

Public Declare Function CallNextHookEx Lib "user32" _

(ByVal hHook As Long, _

ByVal nCode As Long, _

ByVal wParam As Long, _

ByVal lParam As Long) As Long

Public Declare Sub CopyMemory Lib "kernel32" _

Alias "RtlMoveMemory" _

(pDest As Any, _

pSource As Any, _

ByVal cb As Long)

Public Declare Function GetKeyboardState Lib "user32" _

(kbArray As KeyboardBytes) As Long

Public Declare Function GetKeyState Lib "user32" _

(ByVal nVirtKey As Long) As Integer

Public Function LowLevelKeyboardProc(ByVal nCode As Long, _

ByVal wParam As Long, _

ByVal lParam As Long) As Long Dim kbdllhs As KBDLLHOOKSTRUCT

If nCode = HC_ACTION Then

Call CopyMemory(kbdllhs, ByVal lParam, Len(kbdllhs))

If (kbdllhs.flags And LLKHF_UP) Then

Select Case kbdllhs.vkCode

Case VK_NUMLOCK

bel1.Visible = (GetKeyState(VK_NUMLOCK) = &HFF81)

Case VK_CAPITAL

bel2.Visible = (GetKeyState(VK_CAPITAL) = &HFF81)

Case VK_SCROLL

bel3.Visible = (GetKeyState(VK_SCROLL) = &HFF81)

Case Else

End Select

End If

End If 'nCode = HC_ACTION

LowLevelKeyboardProc = CallNextHookEx(m_hDllKbdHook, _

nCode, _

wParam, _

lParam)

End Function

Form1中加入3个标签控件Label1、Label2、Label3

Form1中的代码

Private Sub Form_Load()

Dim kbdState As KeyboardBytes

Call GetKeyboardState(kbdState)

With Label1

.Caption = "Numlock is ON"

.Alignment = vbRightJustify

End With

With Label2

.Caption = "Caps lock is ON"

.Alignment = vbRightJustify

End With

With Label3

.Caption = "Scroll lock is ON"

.Alignment = vbRightJustify

End With

Label1.Visible = kbdState.kbByte(VK_NUMLOCK) = 1

Label2.Visible = kbdState.kbByte(VK_CAPITAL) = 1

Label3.Visible = kbdState.kbByte(VK_SCROLL) = 1

相关文档
最新文档