标准键盘上有三个可以锁定按键:Caps Lock、Num Lock和Scroll Lock。即使是电脑小白也知道这三个键的用法,这里不再赘述。可是在VBA中如何查询这三个按键的当前状态呢?其实并不复杂,调用一个API就可以实现。
Private Type udtKeyboardBytes
bytKB(0 To 255) As Byte
End Type
Declare Function GetKeyboardState Lib "user32" _
(pbKeyState As udtKeyboardBytes) As Long
Sub Demo()
Dim udtKB As udtKeyboardBytes
GetKeyboardState udtKB
Debug.Print "Caps Lock=" & udtKB.bytKB(20)
Debug.Print "Scroll Lock=" & udtKB.bytKB(145)
Debug.Print "Num Lock=" & udtKB.bytKB(144)
End Sub
首先声明一个自定义结构用于保存按键状态,然后调用GetKeyboardState
将虚拟键的状态拷贝到缓冲区,udtKB
为256个元素的Byte数组,下标为0至255,其中第21,145,146分别对应Caps Lock,Num Lock,Scroll Lock,返回值为1说明该按键处于锁定状态。