Char eines Keys ermitteln

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von luckyracer8.

    Char eines Keys ermitteln

    Meine Frage - Kann man irgendwie den wert einer gedrückten taste ermitteln -dass das bei den buchstaben geht is mir natürlich klar- aber bei tasten wie + ist der string dann "plus" :(. Und nein ich möchte nicht ermitteln, was für eine Taste gedrückt wurde :) -sondern den Wert der Taste. z.B. so:

    gedrückte tasten: Q und AltGr -> zu ermittelter char: "@"

    gedrückte tasten: A und shift -> zu ermittelnder char: "A"

    gedrückte taste: P -> zu ermittelnder char: "p"

    gedrückte tasten: + und AltGr -> zu ermittelnder char "~"

    Ich hoffe ihr könnt mir helfen, denn ich möchte nicht alle taste einzeln abfragen und dann einen Wert ermitteln das dauert nähmlich zu lange :S
    Such Dir eine entsprechende Tabelle oder
    Mach Dir ein kleines Testprogramm mit einr TextBox, dort leitest Du das KeyDown-Ereignis ab und trägst alle möglichen Parameter in entsprechende Labels.
    Das geht fast am schnellsten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Etwas unfangreicher:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Declare Function MapVirtualKey Lib "user32.dll" Alias "MapVirtualKeyA" (ByVal uCode As UInt32, ByVal uMapType As UInt32) As UInt32
    2. Const MAPVK_VK_TO_VSC As UInt32 = &H0
    3. Const MAPVK_VSC_TO_VK As UInt32 = &H1
    4. Const MAPVK_VK_TO_CHAR As UInt32 = &H2
    5. Const MAPVK_VSC_TO_VK_EX As UInt32 = &H3
    6. Const MAPVK_VK_TO_VSC_EX As UInt32 = &H4
    7. Structure TastenCodes
    8. Dim ChrValue As String
    9. Dim Character As String
    10. Dim VbNetName As String
    11. Dim KeyCode As System.Windows.Forms.Keys
    12. Dim KeyValue As Integer
    13. End Structure
    14. Private Sub TextBox1_KeyUpDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    15. Dim NewTaste As New TastenCodes
    16. NewTaste.KeyValue = e.KeyValue
    17. NewTaste.ChrValue = Chr(e.KeyValue)
    18. NewTaste.KeyCode = e.KeyCode
    19. NewTaste.Character = TextBox1.Text
    20. NewTaste.VbNetName = e.KeyCode.ToString
    21. Dim text As String = sender.Text
    22. If (NewTaste.ChrValue.Trim = "") Then
    23. NewTaste.ChrValue = "-"
    24. End If
    25. TextBox2.Text = NewTaste.KeyValue
    26. TextBox3.Text = NewTaste.ChrValue
    27. TextBox4.Text = NewTaste.KeyCode
    28. TextBox5.Text = NewTaste.Character
    29. TextBox6.Text = NewTaste.VbNetName
    30. TextBox7.Text = "| " & NewTaste.ChrValue & " | " & NewTaste.VbNetName & " |"
    31. Clipboard.Clear()
    32. Clipboard.SetText(TextBox7.Text)
    33. TextBox7.Text = Convert.ToChar(NewTaste.KeyCode)
    34. Dim uu As UInt32 = MapVirtualKey(e.KeyCode, MAPVK_VK_TO_CHAR)
    35. TextBox8.Text = Chr(uu)
    36. TextBox1.Text = ""
    37. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke! Werd ich gleich mal ausprobieren :)

    Edit: Ist aber nicht ganz was ich meine :(
    Ich will aus z.b. OemPlus + ermitteln und wenn auch noch Shift gedrückt ist * usw. So wie es passiert, wenn jmd. etwas in eine TextBox schreibt. Bloß das ich halt keine Textbox habe.

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

    Bastlerlösung:
    Eine Combobox mit Auswahl "ALT","SHIFT", usw.
    Eine Textbox für das Zeichen,
    eine Textbox für die Ausgabe.
    ein Button zum starten.

    Beim Buttonklick wird die Zusatztaste ermittelt (Shift, usw..), das Zeichen ermittelt.
    Dann mit Textbox.Focus auf die Ausgabetextbox gehen, und die oben ermittelten Zeichen per Sendkeys schicken.

    Funktioniert prima, gerade getestet.
    Willst Du fertigen Code abgreifen? :thumbdown:
    Willst Du Deine Hausaufgaben von uns gemacht haben? :thumbdown:
    Was ist, wenn Du einen Einser bekommst und den kopierten Code nicht verstehst? :thumbdown:
    Ergreife die Initiative. :thumbsup:
    Suche eigene Lösungen. :thumbsup:
    Betrachte unsere Posts als Anstoß für eine eigene Lösung, nicht aber als Lösung.
    Mach es selbst. :thumbup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Willst Du fertigen Code abgreifen?

    Nein, ich hab nur nicht ganz verstanden was er meint :(
    Willst Du Deine Hausaufgaben von uns gemacht haben?

    Nein, is Privat :D
    Was ist, wenn Du einen Einser bekommst und den kopierten Code nicht verstehst?

    Den Code würde ich dann warscheinlich verstehen :thumbsup:
    Ergreife die Initiative.

    Dazu muss ich verstehen was er meint
    Suche eigene Lösungen.

    Das hab ich versucht und die einzige, die mir eingefallen ist, ist die gewesen, jeder Taste die Zeichen selbst zuzuweisen.
    So, hab das ganze jetzt auf meine art und weise gemacht (:D) und falls es jmd braucht, hier ist es:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim AltGrPressed = False
    2. Private Sub KeyDown(ByVal Key As System.Windows.Forms.Keys) Handles WasWeisIch.KeyDown
    3. If Key = Windows.Forms.Keys.RMenu Then
    4. AltGrPressed = True
    5. End If
    6. If (Key >= 65 And Key <= 90) Then
    7. Select Case Key
    8. Case Windows.Forms.Keys.Q
    9. addtext("q", "Q", "@")
    10. Case Windows.Forms.Keys.E
    11. addtext("e", "E", "€")
    12. Case Windows.Forms.Keys.M
    13. addtext("m", "M", "µ")
    14. Case Else
    15. addtext(Key.ToString)
    16. End Select
    17. ElseIf (Key >= 48 And Key <= 57) Then
    18. Select Case Key
    19. Case Windows.Forms.Keys.D1
    20. addtext("1", "!")
    21. Case Windows.Forms.Keys.D2
    22. addtext("2", """", "²")
    23. Case Windows.Forms.Keys.D3
    24. addtext("3", "§", "³")
    25. Case Windows.Forms.Keys.D4
    26. addtext("4", "$")
    27. Case Windows.Forms.Keys.D5
    28. addtext("5", "%")
    29. Case Windows.Forms.Keys.D6
    30. addtext("6", "&")
    31. Case Windows.Forms.Keys.D7
    32. addtext("7", "/", "{")
    33. Case Windows.Forms.Keys.D8
    34. addtext("8", "(", "[")
    35. Case Windows.Forms.Keys.D9
    36. addtext("9", ")", "]")
    37. Case Windows.Forms.Keys.D0
    38. addtext("0", "=", "}")
    39. End Select
    40. ElseIf Key >= 96 And Key <= 105 Then
    41. addtext(Key.ToString.Substring(6))
    42. Else
    43. Select Case Key
    44. Case Windows.Forms.Keys.Space
    45. addtext(" ")
    46. Case Windows.Forms.Keys.Return
    47. addtext(vbNewLine)
    48. Case Windows.Forms.Keys.Add
    49. addtext("+")
    50. Case Windows.Forms.Keys.Subtract
    51. addtext("-")
    52. Case Windows.Forms.Keys.Divide
    53. addtext("/")
    54. Case Windows.Forms.Keys.Multiply
    55. addtext("*")
    56. Case Windows.Forms.Keys.Decimal
    57. addtext(",")
    58. Case Windows.Forms.Keys.Back
    59. addtext("back")
    60. Case Windows.Forms.Keys.Oemtilde
    61. addtext("ö")
    62. Case Windows.Forms.Keys.Oem1
    63. addtext("ü")
    64. Case Windows.Forms.Keys.Oem7
    65. addtext("ä")
    66. Case Windows.Forms.Keys.OemOpenBrackets
    67. addtext("ß", "?", "\")
    68. Case Windows.Forms.Keys.Oem5
    69. addtext("^", "°")
    70. Case Windows.Forms.Keys.Oem6
    71. addtext("´", "`")
    72. Case Windows.Forms.Keys.Oemcomma
    73. addtext(",", ";")
    74. Case Windows.Forms.Keys.OemPeriod
    75. addtext(".", ":")
    76. Case Windows.Forms.Keys.Oemplus
    77. addtext("+", "*", "~")
    78. Case Windows.Forms.Keys.OemQuestion
    79. addtext("#", "'")
    80. Case Windows.Forms.Keys.OemMinus
    81. addtext("-", "_")
    82. Case Windows.Forms.Keys.OemBackslash
    83. addtext("<", ">", "|")
    84. End Select
    85. End If
    86. End Sub
    87. Sub addtext(text As String, Optional shiftpressedkey As String = "", Optional altgrpressedkey As String = "")
    88. If text = "back" Then
    89. Try
    90. TextBox1.Text = TextBox1.Text.Substring(0, TextBox1.Text.Count - 1)
    91. Catch
    92. End Try
    93. Else
    94. If Not shiftpressedkey = "" Then
    95. If AltGrPressed Then
    96. TextBox1.Text += altgrpressedkey
    97. ElseIf (Not My.Computer.Keyboard.ShiftKeyDown And Not My.Computer.Keyboard.CapsLock) Or (My.Computer.Keyboard.ShiftKeyDown And My.Computer.Keyboard.CapsLock) Then
    98. TextBox1.Text += text
    99. Else
    100. TextBox1.Text += shiftpressedkey
    101. End If
    102. Else
    103. If (Not My.Computer.Keyboard.ShiftKeyDown And Not My.Computer.Keyboard.CapsLock) Or (My.Computer.Keyboard.ShiftKeyDown And My.Computer.Keyboard.CapsLock) Then
    104. TextBox1.Text += text.ToLower
    105. Else
    106. TextBox1.Text += text.ToUpper
    107. End If
    108. End If
    109. End If
    110. End Sub


    Der Code funktioniert für alle tasten auf meiner (!) Tastatur.
    Mag sein das es GurkenCode ist, aber ich habs halt schnell gemacht.

    RodFromGermany schrieb:

    Willst Du Deine Hausaufgaben von uns gemacht haben?

    Nein, aber vielleicht hab ich sie jetzt für jemanden anderen gemacht :thumbsup:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „luckyracer8“ ()