分享

VB - 设定开关键[CapsLock - ScrollLock - NumLock]

 yuxinrong 2009-10-23

方法:借助API来完成
思路:先用 "GetKeyState" 判断开关键的状态,并转换为布尔值,如果打开,则位0为1,此时布尔值为True,然后判断该布尔值与设定布尔值是否相同,如果不同,使用 "MapVirtualKey" 返回开关键码对应的扫描码,最后用到两次 "keybd_event" ,第一次模拟开关键按下,第二次模拟开关键放开。

'以下代码在模块:
Option Explicit
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Public Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, _
    ByVal wMapType As Long) As Long
Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
    ByVal bScan As Byte, _
    ByVal dwFlags As Long, _
    ByVal dwExtraInfo As Long)
Public Const KEYEVENTF_EXTENDEDKEY = &H1
Public Const KEYEVENTF_KEYUP = &H2

Public Sub SetNumLock(ByVal bLock As Boolean)
    Dim Check As Boolean, ScanCode As Long
    Check = CBool(GetKeyState(vbKeyNumlock))
    If Check <> bLock Then
        ScanCode = MapVirtualKey(vbKeyNumlock, 0)
        Call keybd_event(vbKeyNumlock, ScanCode, 0, 0)
        Call keybd_event(vbKeyNumlock, ScanCode, KEYEVENTF_KEYUP, 0)
    End If
End Sub

Public Sub SetScrollLock(ByVal bLock As Boolean)
    Dim Check As Boolean, ScanCode As Long
    Check = CBool(GetKeyState(vbKeyScrollLock))
    If Check <> bLock Then
        ScanCode = MapVirtualKey(vbKeyScrollLock, 0)
        Call keybd_event(vbKeyScrollLock, ScanCode, 0, 0)
        Call keybd_event(vbKeyScrollLock, ScanCode, KEYEVENTF_KEYUP, 0)
    End If
End Sub

Public Sub SetCapsLock(ByVal bLock As Boolean)
    Dim Check As Boolean, ScanCode As Long
    Check = CBool(GetKeyState(vbKeyCapital))
    If Check <> bLock Then
        ScanCode = MapVirtualKey(vbKeyCapital, 0)
        Call keybd_event(vbKeyCapital, ScanCode, 0, 0)
        Call keybd_event(vbKeyCapital, ScanCode, KEYEVENTF_KEYUP, 0)
    End If
End Sub

'调用示例(这里只例举设定NumLock键,其他两个键调用方法相同):
    Call SetNumLock(False) '关闭NumLock键
    Call SetNumLock(True) '打开NumLock键

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多