使用DLL动态链接库屏蔽任意按键(VB调用)

本文详细介绍了一种在Windows环境下实现键盘消息监听和特定按键屏蔽的技术方案。通过使用全局键盘钩子,可以捕获所有应用程序的键盘输入,并通过自定义的回调函数处理按键事件。此外,还提供了一个VB Demo用于演示如何屏蔽指定的虚拟按键,如Page Up、Page Down等,以防止这些按键在某些应用中触发不期望的行为。
摘要由CSDN通过智能技术生成
' 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

成品DLL及VB demo下载地址:
https://download.csdn.net/download/hangvane123/10701404

MaskKey.dll源码及VC++调用请查看原文(原文下载链接已失效)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值