多个非修饰键事件 - VB.NET

时间:2014-06-11 12:29:43

标签: .net vb.net keyboard-shortcuts

有没有办法识别包含修饰符的多个按键组合?

我知道检测和使用Modifier + Normal key组合的方法 - 在MyBase.KeyDown事件下,e.KeyCode提供与每个键盘字母相关的数字。我知道如何使用e.Modifier Keys. 来合并这些内容。

所以我希望能够识别多个组合键,例如C + T - 其中不包含Modifier。这可能吗?

2 个答案:

答案 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}不起作用)。如果您需要帮助,请告诉我。