Tastendruck auswerten

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von tron25.

    Tastendruck auswerten

    Hallo,

    ich habe ein Gerät, welches über Bluetooth mit dem PC verbunden ist. Das Gerät hat zwei Tastengruppen. Einmal 6 und einmal 7 Tasten. Jedesmal, wenn eine Taste gedrückt oder losgelassen wird, sendet das Gerät die Zustände aller Tasten zurück. Jede Gruppe liefert ein Byte zurück. Die erste Taste einer Gruppe hat den Wert 1, die Zweite 2, die Dritte 4, usw. Somit kann anhand des zurückgelieferten Bytes der Zustand jeder Taste einer Gruppe erkannt werden. Nun suche ich nach einer Möglichkeit, beispielsweise eine Tastenkombination zu erkennen. Als Idee hatte ich Folgende:

    Wenn ein Wert zurückgegeben wird, wird dieser inclusive der aktuellen Zeit in eine Liste geschrieben.
    Wenn der Wert 0 geliefert wird, werden alle Werte berücksichtigt, die nicht länger als das festgelegte Intervall zurückliegen, um herauszufinden, welche Tasten zu der aktuellen Kombination gehören.
    Nach dem Auswerten der Werte, wird die Liste geleert.

    Was sagt ihr zu diesem Weg? Oder gibt es da etwas viel effektiveres?
    Bei Tastenkombinationen spielt die Zeit keine Rolle. Da könnte ich es tatsächlich so machen.

    Die Zeit währe interessant für Doppelklicks.

    Ich werde erst einmal einzelne Tasten und Tastenkombinationen mit einer Liste programmieren. Danach kommen Doppelklicks dran. Sicherlich brauche ich da nochmal eure Hilfe.

    ----------

    So, ich habe erst einmal beschlossen, dass keine Kombinationen verwendet werden können. Statt einer Liste habe ich für jede Taste eine Boolean-Variable erstellt. Hier Auszüge aus dem Code:

    VB.NET-Quellcode

    1. Public Class PunktbilderFormular
    2. Dim TasteLinks As Boolean = False
    3. Dim TasteMitte As Boolean = False
    4. Dim TasteRechts As Boolean = False
    5. Dim KreuzHoch As Boolean = False
    6. Dim KreuzRechts As Boolean = False
    7. Dim KreuzRunter As Boolean = False
    8. Dim KreuzLinks As Boolean = False
    9. Dim Taste1 As Boolean = False
    10. Dim Taste2 As Boolean = False
    11. Dim Taste3 As Boolean = False
    12. Dim Taste4 As Boolean = False
    13. Dim Taste5 As Boolean = False
    14. Dim Taste6 As Boolean = False
    15. Public Sub HyperFlat76RueckgabeAuswerten(Daten)
    16. Dim Tastenwert As Integer
    17. If InStr(Daten, Chr(27)) Then
    18. Daten = Mid(Daten, InStr(Daten, Chr(27)), Len(Daten))
    19. End If
    20. Select Case Mid(Daten, 1, 2)
    21. Case Chr(27) & Chr(49)
    22. 'Hier werden die Tasten der unteren Gruppe ausgewertet.
    23. Tastenwert = Asc(Mid(Daten, 6, 1))
    24. If Tastenwert = 0 Then
    25. HyperFlat76TastenbefehlAusfuehren(Asc(Mid(Daten, 6, 1)) & Asc(Mid(Daten, 7, 1)))
    26. End If
    27. If Tastenwert - 128 >= 0 Then
    28. TasteRechts = True
    29. Tastenwert -= 128
    30. End If
    31. If Tastenwert - 64 >= 0 Then
    32. TasteLinks = True
    33. Tastenwert -= 64
    34. End If
    35. If Tastenwert - 16 >= 0 Then
    36. TasteMitte = True
    37. Tastenwert -= 16
    38. End If
    39. If Tastenwert - 8 >= 0 Then
    40. KreuzRunter = True
    41. Tastenwert -= 8
    42. End If
    43. '...
    44. End Select
    45. End Sub
    46. Public Sub HyperFlat76TastenbefehlAusfuehren(Tastengruppe As String)
    47. If Mid(Tastengruppe, 1, 1) = 0 Then
    48. If TasteLinks Then
    49. BrailleanzeigeNachLinksDrehen_Click(Me, EventArgs.Empty)
    50. End If
    51. If TasteMitte Then
    52. BrailleanzeigeZuruecksetzenMenue_Click(Me, EventArgs.Empty)
    53. End If
    54. If TasteRechts Then
    55. BrailleanzeigeNachRechtsDrehenMenue_Click(Me, EventArgs.Empty)
    56. End If
    57. If KreuzLinks Then
    58. Select Case BrailleanzeigeAusrichtung
    59. Case 0
    60. BrailleanzeigeLinksMenue_Click(Me, EventArgs.Empty)
    61. Case 1
    62. BrailleanzeigeHochMenue_Click(Me, EventArgs.Empty)
    63. Case 2
    64. BrailleanzeigeRechtsMenue_Click(Me, EventArgs.Empty)
    65. Case 3
    66. BrailleanzeigeRunterMenue_Click(Me, EventArgs.Empty)
    67. End Select
    68. End If
    69. '...
    70. TasteLinks = False
    71. TasteMitte = False
    72. TasteRechts = False
    73. KreuzHoch = False
    74. '...
    75. end if
    76. GrafikAufbauen()
    77. End Sub
    78. End Class


    Auf die gleiche Weise werden die Tasten der oberen Gruppe behandelt.

    Sorry, ich habe wieder MID benutzt.

    Jetzt funktioniert es und das Programm läßt sich über die Tasten des Gerätes steuern. Bevor ich am Anfang den Datenstrom noch nicht angepaßt hatte, wurde leider nicht jeder Befehl erkannt, da das Chr(27) nicht immer am Anfang stand.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „tron25“ ()