用VB切换三个特殊键 ——CapsLock键、NumLock键、ScrollLock键的状态
在用VB编制应用程序时,经常遇到这种情况:有时需要大写;有时则需要小写输入汉字;有时需用数字小键盘输入数据等。这些情况都涉及三个特殊键——CapsLock键、NumLo
ck键、ScrollLock键的使用。本文将介绍如何在应用程序中自动控制这三个特殊键的状态。
实现原理
这三个特殊键(CapsLock键、NumLock键、ScrollLock键)有时候可以称为切换(Togg le)键,即可将它们从一种状态切换到另一种状态。确定单个切换键的当前状态是可能的,但不能独立地改变这些键的状态。为了改变它们的状态,需要改动并修改键盘的状态图。键盘状态图是一个字节数组,其中包含了每个键的当前状态,可以利用该数组检索、修改并更新键盘状态图。Windows
95 API函数提供了实现上述操作的功能。GetKeyboardS tate函数用来将256个虚拟键的状态拷贝到指定的缓冲区中。其中pbKeyState参数的每个字节包含一个虚拟键的状态数据。若NumLock键被打开,则pbKeyState参数的对应值为1,
否则为0。SetKeyboardState函数用来将键盘状态数组拷贝到键盘状态表中。
实现方法
1. 建立含有如下控件的窗体: 表1
2. 在目标文件列表(OBJECT)中选择GENERAL,在过程列表(PROC) 中选择DECLARATION S(声明),系统进入窗体级代码的定义窗口中。输入如下定义:
Option Explicit
Private Declare Function GetKeyboardStateLib "user32"Ali
as(ByVal pbKeySt ate As String)As Boolean
Private Declare Function SetKeyboardStateLib "user32"(By
Val lppbKeyState As String)As Boolean
Const VK_CAPITAL=&H14 'CapsLock键代码
Const VK_NUMLOCK=&H90 'NumLock键代码
Const VK_SCROLL=&H91 'ScrollLock键代码
3. 在命令按钮1单击事件中,输入如下代码:
Private Command1_Click() '切换CapsLock键的状态
Dim tCaption As String
tCaption=Command1.Caption
If Instr(1,tCaption,"On")>0 then
Call ToggleStateSet(VK_CAPITAL,True)
Label1.BackColor=vbWhite
'若CapsLock键是Off时,指示灯为白色
Command1.Caption="CapsLockOff"
Else
Call ToggleStateSet(VK_CAPITAL,False)
Label1.BackColor=vbGreen
'若CapsLock键是On时,指示灯为绿色
Command1.Caption="CapsLockOn"
End If
End Sub
命令按钮2和3单击事件的代码与按钮1类似,分别切换Num Lock键和Scroll Lock键的状态。
4. 在命令按钮4单击事件中,输入如下代码:
Private Command4_Click()
End
End Sub
5. 在设置三个特殊键状态转换事件中,输入如下代码:
Sub ToggleStateSet(nKeyCode As Integer,bState As Boolean )
Dim tKeyboardMap As String*256
Dim bResult
tKeyboardMap=String$(255,0)
bResult=GetKeyboardState(tKeyboardMap)
If bState=True Then
Mid$(tKeyboardMap,nKeyCode+1,1)=‘1'
Else
Mid$(tKeyboardMap,nKeyCode+1,1)=‘0'
End If
bResult=SetKeyboardState(tKeyboardMap)
EndSub
上述程序在同创P/200、中文Windows 95、Windows NT 4.0、Vi sual Basic 5.0软硬件环境下运行通过。
江苏 蔡可训