用API GetKeyboardState ,判断所有的键里哪些被按下了。
成都网站建设哪家好,找创新互联建站!专注于网页设计、成都网站建设、微信开发、小程序开发、集团企业网站设计等服务项目。核心团队均拥有互联网行业多年经验,服务众多知名企业客户;涵盖的客户类型包括:阳光房等众多领域,积累了大量丰富的经验,同时也获得了客户的一致认可!
下面的是判断键盘灯的状态
Public Class NativeMethods
Private Shared keyState() As Byte
DllImport("user32.dll") _
Private Shared Function GetKeyboardState(ByVal keyState() As Byte) As Boolean
End Function
Private Shared Sub Update()
keyState = New Byte(256) {}
Dim result As Boolean = GetKeyboardState(keyState)
' Check for error:
If result = False Then
Debug.WriteLine("GetKeyBoardState error: " Marshal.GetLastWin32Error)
Throw New Exception("GetKeyBoardState error: " Marshal.GetLastWin32Error)
End If
End Sub
Public Enum LightState
Off
[On]
End Enum
' Example - the keyboard lights...
Public Shared ReadOnly Property CapsLockState() As LightState
Get
Update()
Dim isOn As Boolean = (keyState(Keys.CapsLock) = 1)
Return IIf(isOn, LightState.On, LightState.Off)
End Get
End Property
Public Shared ReadOnly Property NumLockState() As LightState
Get
Update()
Dim isOn As Boolean = (keyState(Keys.NumLock) = 1)
Return IIf(isOn, LightState.On, LightState.Off)
End Get
End Property
Public Shared ReadOnly Property ScrollLockState() As LightState
Get
Update()
Dim isOn As Boolean = (keyState(Keys.Scroll) = 1)
Return IIf(isOn, LightState.On, LightState.Off)
End Get
End Property
End Class
如果是在自己的程序中,可以利用自身的按键事件,如果是全局键盘,那就要用到键盘hook技术了,比较复杂。
Private Sub Form_Load()
Label1.Caption = ""
Text1 = ""
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then '回车键
Label1.Caption = 1
ElseIf KeyAscii = 8 Then '退格键
Label1.Caption = 2
Else '其他按键
Label1.Caption = 3
End If
Me.Cls
Print KeyAscii
End Sub
执行键盘事件方法如下:
第一步,点击VS工具。
第二步,打开后,新建一个Windows窗体应用程序。
第三步,请看右下方Form的属性栏。
第四步,双击KeyDown。
第五步,输入提示按键代码,如图所示。
第六步,再次输入代码,设置属性KeyPreview为true。
第七步,运行程序,按下举例F5,则会弹出提示,表明已经成功获。
窗体内检测按键
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.KeyPreview = True '注册窗体的键盘事件
End Sub
在TextBox1中显示按键代码
Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
TextBox1.Text = Str(e.KeyCode) + vbCrLf
End Sub
窗体没有焦点,用窗体监测键盘输入缓冲区可以解决,但这似乎可以用于监测用户输入内容,不要用于非法目的呀!所以就是知道也不会告诉你的。
把判断代码放到KeyDown事件中,KeyCode是这个事件的参数,在别的过程里无效。
另外,要注意按键的接收对象,焦点在按钮则需要在按钮的KeyDown事件,或者设置窗体的KeyPreview=True,这样窗体总是能够接收到按键。