你可以先用GetKeyboardState检测Caps Lock的值,如果为开则将输入转换为小写就行了。Option ExplicitPrivate Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer Private Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long Private Declare Function SetKeyboardState Lib "user32" (lppbKeyState As Byte) As LongPrivate Sub SetKeyState(intKey As Integer, fTurnOn As Boolean) '取得键盘目前的状态,设定您想设定的任意键,再将其他键还成之前的状态,只改变一个键值 Dim abytBuffer(0 To 255) As Byte GetKeyboardState abytBuffer(0) abytBuffer(intKey) = CByte(Abs(fTurnOn)) SetKeyboardState abytBuffer(0) End SubFunction GetCapslock() As Boolean '返回 Capslock 的状态 GetCapslock = CBool(GetKeyState(vbKeyCapital) And 1) End FunctionSub SetCapslock(Value As Boolean) '设定 Capslock 的状态 Call SetKeyState(vbKeyCapital, Value) End Sub Private Sub Command1_Click() SetCapslock True ' 设定 CapslockLock为 On End SubPrivate Sub Command2_Click() MsgBox "CapslockLock:" & GetCapslock ' 取得 CapslockLock状态 End Sub
放一个timer实时监测,开了就自动关闭Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer Private Declare Function keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) As BooleanPrivate Sub Form_Load() Timer1.Interval = 1 End SubPrivate Sub Timer1_Timer() If GetKeyState(20) Then keybd_event 20, 0, 0, 0 keybd_event 20, 0, 2, 0 End If End Sub
其实你可以在输入框中用下面代码就可以解决了,比如说Text1.Text只能输入大写字母,不能输入小写字母 Private Sub Text1_Change() Text1.Text = UCase(Text1.Text) '强制转换为大写字母 SendKeys "{End}" '并向Text1.Text发送键盘上的End键值 End Sub
Private Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long
Private Declare Function SetKeyboardState Lib "user32" (lppbKeyState As Byte) As LongPrivate Sub SetKeyState(intKey As Integer, fTurnOn As Boolean)
'取得键盘目前的状态,设定您想设定的任意键,再将其他键还成之前的状态,只改变一个键值
Dim abytBuffer(0 To 255) As Byte
GetKeyboardState abytBuffer(0)
abytBuffer(intKey) = CByte(Abs(fTurnOn))
SetKeyboardState abytBuffer(0)
End SubFunction GetCapslock() As Boolean
'返回 Capslock 的状态
GetCapslock = CBool(GetKeyState(vbKeyCapital) And 1)
End FunctionSub SetCapslock(Value As Boolean)
'设定 Capslock 的状态
Call SetKeyState(vbKeyCapital, Value)
End Sub
Private Sub Command1_Click()
SetCapslock True ' 设定 CapslockLock为 On
End SubPrivate Sub Command2_Click()
MsgBox "CapslockLock:" & GetCapslock ' 取得 CapslockLock状态
End Sub
Private Declare Function keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) As BooleanPrivate Sub Form_Load()
Timer1.Interval = 1
End SubPrivate Sub Timer1_Timer()
If GetKeyState(20) Then
keybd_event 20, 0, 0, 0
keybd_event 20, 0, 2, 0
End If
End Sub
Private Sub Text1_Change()
Text1.Text = UCase(Text1.Text) '强制转换为大写字母
SendKeys "{End}" '并向Text1.Text发送键盘上的End键值
End Sub