标签:VBA
下面是在网上搜集到的一段代码,可以设置CapsLock键、NumLock键、ScrollLock键的状态,这样可以使用其它代码调用这段代码来改变这些键的状态。
代码如下:
代码语言:javascript复制Private Declare PtrSafe Sub keybd_event Lib "user32" _
(ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare PtrSafe Function GetKeyboardState Lib "user32" _
(pbKeyState As Byte) As Long
'声明常量:
Const VK_NUMLOCK = &H90
Const VK_SCROLL = &H91
Const VK_CAPITAL = &H14
Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2
Public Enum KB_Keys
NumLock
CapsLock
Scroll
End Enum
Public Enum KB_State
StateOn
StateOff
StateFlip
End Enum
Public Sub SetKeyState(LockKey As KB_Keys, KeyState As KB_State)
'// 存储要操作的键的代码
Dim Key As Long
'// 包含所有键的字节数组
Dim Keys(0 To 255) As Byte
'// 获取所有键当前状态
GetKeyboardState Keys(0)
'// 决定去设置哪个键
Select Case LockKey
Case NumLock
Key = VK_NUMLOCK
Case CapsLock
Key = VK_CAPITAL
Case Else
Key = VK_SCROLL
End Select
'// 决定新的状态并对该键写入字节
Select Case KeyState
Case StateOn
Keys(Key) = 1
Case StateOff
Keys(Key) = 0
Case Else
Keys(Key) = IIf(Keys(Key), 0, 1)
End Select
'// 触发Key Down事件
keybd_event Key, &H45, KEYEVENTF_EXTENDEDKEY Or 0, Keys(Key)
'// 以及相应的Key Up事件
keybd_event Key, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, Keys(Key)
End Sub
下面的代码调用上述代码开启字母大写:
代码语言:javascript复制Public Sub Test()
'开启字母大写
SetKeyState CapsLock, StateOn
End Sub