有没有办法识别不包含修饰符的多个按键组合?
我知道检测和使用Modifier
+ Normal key
组合的方法 - 在MyBase.KeyDown
事件下,e.KeyCode
提供与每个键盘字母相关的数字。我知道如何使用e.Modifier
和 Keys.
来合并这些内容。
所以我希望能够识别多个组合键,例如C
+ T
- 其中不包含Modifier
。这可能吗?
答案 0 :(得分:0)
当然,你可以GetKeyState()
:
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As IntPtr) As Short
然后,例如,控制要检查的每个键是否按下:
Dim keypressed As Keys
If GetKeyState(87) < 0 OrElse GetKeyState(38) < 0 Then : keypressed = Keys.Up
ElseIf GetKeyState(65) < 0 OrElse GetKeyState(37) < 0 Then : keypressed = Keys.Left
ElseIf GetKeyState(68) < 0 OrElse GetKeyState(39) < 0 Then : keypressed = Keys.Right
ElseIf GetKeyState(83) < 0 OrElse GetKeyState(40) < 0 Then : keypressed = Keys.Down
Else : keypressed = Nothing
End If
答案 1 :(得分:0)
旧学校方式:
Public Class Form1
Dim combination As New List(Of Keys)({Keys.T, Keys.C})
Dim currentKeys As New List(Of Keys)
Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
currentKeys.Add(e.KeyCode)
If currentKeys.Intersect(combination).Count = combination.Count Then
'this is our combo
MessageBox.Show("Fatality!")
currentKeys.Clear()
End If
End Sub
Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
currentKeys.Remove(e.KeyCode)
End Sub
End Class
如果同时按下C和T,则会触发,但如果单独按下则不会触发。此外,当{C,T}和其他一些字母被按下时(任何包含{C,T}的组合)。您可以将其修改为仅在按下{C,T}时触发(例如,{C,T,X}不起作用)。如果您需要帮助,请告诉我。