在VB中如何使用代码禁止Caps Lock键。急!!!!
如题。 问题点数:100、回复次数:7Top
1 楼joeouyang(孤独老人)回复于 2004-09-03 22:07:13 得分 0
补充一下:是:如何在应用程序中禁止该键。Top
2 楼programfish(紫夜)回复于 2004-09-03 22:38:54 得分 50
你可以先用GetKeyboardState检测Caps Lock的值,如果为开则将输入转换为小写就行了。
Option Explicit
Private 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 Long
Private 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 Sub
Function GetCapslock() As Boolean
'返回 Capslock 的状态
GetCapslock = CBool(GetKeyState(vbKeyCapital) And 1)
End Function
Sub SetCapslock(Value As Boolean)
'设定 Capslock 的状态
Call SetKeyState(vbKeyCapital, Value)
End Sub
Private Sub Command1_Click()
SetCapslock True ' 设定 CapslockLock为 On
End Sub
Private Sub Command2_Click()
MsgBox "CapslockLock:" & GetCapslock ' 取得 CapslockLock状态
End Sub
Top
3 楼joeouyang(孤独老人)回复于 2004-09-03 22:52:54 得分 0
试了一下,效果是强制转换成大写。谢谢先。以后再结贴。看看还有没有别的办法呢Top
4 楼BlueBeer(1win)回复于 2004-09-04 02:46:25 得分 50
放一个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 Boolean
Private Sub Form_Load()
Timer1.Interval = 1
End Sub
Private Sub Timer1_Timer()
If GetKeyState(20) Then
keybd_event 20, 0, 0, 0
keybd_event 20, 0, 2, 0
End If
End SubTop
5 楼rainstormmaster(暴风雨 v2.0)回复于 2004-09-04 09:49:14 得分 0
你也可以试试用全局钩子解决Top
6 楼chen1bin2(天涯浪子)回复于 2004-09-04 10:25:38 得分 0
其实你可以在输入框中用下面代码就可以解决了,比如说Text1.Text只能输入大写字母,不能输入小写字母
Private Sub Text1_Change()
Text1.Text = UCase(Text1.Text) '强制转换为大写字母
SendKeys "{End}" '并向Text1.Text发送键盘上的End键值
End SubTop
7 楼jiang8360(姜)回复于 2004-09-04 14:02:13 得分 0
upTop




