1. 程式人生 > >使用DLL動態連結庫遮蔽任意按鍵(VB呼叫)

使用DLL動態連結庫遮蔽任意按鍵(VB呼叫)

' Module1.bas

Option Explicit
 
Private Const WM_KEYDOWN = &H100
Private Const WM_KEYUP = &H101
Private Const WM_SYSKEYDOWN = &H104
Private Const WM_SYSKEYUP = &H105
 
Public Type KBDLLHOOKSTRUCT
    vkCode As Long              ' 虛擬按鍵碼(1--254)
    scanCode As Long            ' 硬體按鍵掃描碼
    flags As
Long ' flags time As Long ' 訊息時間戳 dwExtraInfo As Long ' 額外資訊 End Type Public Enum KEYACTION ACTION_KEYDOWN = WM_KEYDOWN ACTION_KEYUP = WM_KEYUP ACTION_SYSKEYDOWN = WM_SYSKEYDOWN ACTION_SYSKEYUP = WM_SYSKEYUP End Enum ' 全域性鍵盤鉤子回撥函式 ' 引數:
action 標識鍵盤訊息(按下,彈起), keyStruct 包含按鍵資訊 Public Function KeyboardProc(ByVal action As KEYACTION, keyStruct As KBDLLHOOKSTRUCT) As Boolean Select Case action Case ACTION_KEYDOWN Debug.Print keyStruct.vkCode, "按下鍵盤按鍵" Case ACTION_KEYUP Debug.Print keyStruct.vkCode,
"彈起鍵盤按鍵" Case ACTION_SYSKEYDOWN Case ACTION_SYSKEYUP End Select ' 返回 True 表示繼續傳遞按鍵訊息 ' 返回 False 表示結束按鍵訊息傳遞 KeyboardProc = False End Function
' Form1.frm
' 窗體上新增1個CommandButton,改名為cmdStartMask

Option Explicit
Private Declare Function StartMaskKey Lib "MaskKey" (lpdwVirtualKey As Long, ByVal nLength As Long, Optional ByVal bDisableKeyboard As Boolean = False) As Long
Private Declare Function StopMaskKey Lib "MaskKey" () As Long
   
Private Sub cmdStartMask_Click()
    Dim key(7) As Long
    key(0) = vbKeyPageUp
    key(1) = vbKeyPageDown
    key(2) = vbKeyReturn
    key(3) = vbKeyLeft
    key(4) = vbKeyRight
    key(5) = vbKeyUp
    key(6) = vbKeyDown
    key(7) = vbKeySpace
If cmdStartMask.Caption = "開始遮蔽" Then
StartMaskKey key(0), UBound(key) + 1
cmdStartMask.Caption = "停止遮蔽"
Else
StopMaskKey
cmdStartMask.Caption = "開始遮蔽"
End If
End Sub
   
Private Sub Form_Unload(Cancel As Integer)
If cmdStartMask.Caption = "停止遮蔽" Then
StopMaskKey
End If
End Sub

MaskKey.dll原始碼及VC++呼叫請檢視原文(原文下載連結已失效)