L-CTRL und R-CTRL unterscheiden

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

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    L-CTRL und R-CTRL unterscheiden

    Hi,

    ich möchte gern in meiner Form, die L-CTRL Taste "fangen". Dazu habe ich in der Form KeyPreview=True gesetzt und das KeyDown-Event abonniert.

    Die Daten zeige ich wie folgt an:

    VB.NET-Quellcode

    1. Debug.Print("Mod = {0} int= {1}", e.Modifiers, Hex(e.Modifiers))
    2. Debug.Print("Code= {0} int= {1}", e.KeyCode, Hex(e.KeyCode))
    3. Debug.Print("Data= {0} int= {1}", e.KeyData, Hex(e.KeyData))


    Beim Drücken der L-CTRL Taste erhalte ich folgende Werte:

    Mod = Control int= 20000
    Code= ControlKey int= 11
    Data= ControlKey, Control int= 20011

    Das sieht ja erst mal auch vollkommen richtig aus.

    Nur wenn ich die R-CTRL Taste drücke, erhalte ich EXAKT die gleichen Werte !

    Wie also kann ich L-CTRL und R-CTRL unterscheiden ?

    LG
    Peter
    @Peter329 So was:

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class Form1
    3. <DllImport("user32.dll")> _
    4. Shared Function GetAsyncKeyState(ByVal vKey As System.Windows.Forms.Keys) As Short
    5. End Function
    6. Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
    7. Label1.Text = String.Format("Mod = {0} int= {1}", e.Modifiers, Hex(e.Modifiers))
    8. Label2.Text = String.Format("Code= {0} int= {1}", e.KeyCode, Hex(e.KeyCode))
    9. Label3.Text = String.Format("Data= {0} int= {1}", e.KeyData, Hex(e.KeyData))
    10. Dim t1 = GetAsyncKeyState(Keys.LControlKey)
    11. Dim t2 = GetAsyncKeyState(Keys.RControlKey)
    12. Label4.Text = t1.ToString("X4")
    13. Label5.Text = t2.ToString("X4")
    14. End Sub
    15. End Class
    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!
    Mit GetAsyncKeyState funkst das perfekt.

    VB.NET-Quellcode

    1. Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles Me.KeyDown
    2. If e.KeyCode = Keys.ControlKey Then
    3. 'LButton = 162 >> Keys.LControlKey
    4. 'RButton = 163 >> Keys.RControlKey
    5. Me.lbModifiers.Text = String.Format("Mod = {0} int= {1}", e.Modifiers, Hex(e.Modifiers))
    6. Me.lbKeyCode.Text = String.Format("Code= {0} int= {1}", e.KeyCode, Hex(e.KeyCode))
    7. Me.lbKeyData.Text = String.Format("Data= {0} int= {1}", e.KeyData, Hex(e.KeyData))
    8. Me.lbDescription.Text = GetDescription()
    9. End If
    10. End Sub
    11. Private Function GetDescription() As String
    12. If Not GetAsyncKeyState(Keys.LControlKey) = 0 Then
    13. Return CType(Keys.LControlKey, Keys).ToString
    14. End If
    15. If Not GetAsyncKeyState(Keys.RControlKey) = 0 Then
    16. Return CType(Keys.RControlKey, Keys).ToString
    17. End If
    18. Return String.Empty
    19. End Function


    Freundliche Grüsse

    exc-jdbi
    Bilder
    • pic1.jpg

      17,19 kB, 450×343, 136 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „exc-jdbi“ ()