Gedrückte Taste abfragen(A-Z(Habe bereits die Suchfunktion benutzt))

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Grassed.

    Gedrückte Taste abfragen(A-Z(Habe bereits die Suchfunktion benutzt))

    Hallo,

    ich wollte fragen, wie man ALLE Tasten abfragt, die man drückt. Ich habe bereits die Google Suchfunktion benutzt, sowie die von vb-paradise.de. Bin auf diese Seite gestoßen: vbarchiv.net/api/details.php?id=getasynckeystate

    Habe es aber leider irgendwie nicht verstanden.

    Hoffe jemand kann mir ein Beispiel geben und mir somit helfen. Danke im Voraus für alle hilfreichen Antworten.

    //edit
    Also ich will das so machen, dass wenn ich die Taste drücke, die ich in TextBox 1 eingetragen habe, sich das Fenster versteckt. Und wenn ich die Taste drücke, die ich in TextBox 2 eingetragen habe, soll sich das Fenster zeigen. Aber wie ich in dem Thread: "[VB 2008] Drücken von F8 dann Fenster unsichtbar (29. April 2009, 16:40)" gelesen habe, verliert die Form den Fokus, sobald das Fenster nicht mehr sichtbar ist. Kann ich es irgendwie anders machen????

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Grassed“ () aus folgendem Grund: Korrigierung

    xXMichaelXx schrieb:

    GetAsyncKeyState *hust*

    Genau das habe ich auf der Seite nicht verstanden. Auf der Seite wird nur erklärt, welche Taste seit dem letzten Aufruf gedrückt wurde...
    Außerdem will ich es überprüfen, wenn die Frame wenn die Form unvisibled ist. Wie man es Visibled habe ich bereits geschafft. Wie unvisible ich es aber wieder?

    //edit kann mir bitte einer helfen, schon 1 Stunde vergangen...

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

    Systemweit...

    //edit Also es soll so sein, wenn man zum Beispiel Firefox auf hat und grad surft, mit der Taste F8 mein Programm öffnet. Oder wenn man auf dem Desktop ist.

    //EDIT KANN MIR _BITTE_ EINER HELFEN?

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

    Hallo Grassed,

    wenn du alle Tasten Systemweit abfragen willst ist GetAsyncKeyState schon das richtige.
    (Auf Vb.NET Declaration achten !)

    Willst du nur bestimmte Tasten abfragen würde ich einen Tastatur Hook empfehlen.

    Beide Techniken wurden hier im Forum bis zum Erbrechen behandelt.
    Also Suche verwenden.

    Klar sollte auch sein, dass wenn du ein Fenster unsichtbar machst, der Focus dann zum nächsten aktiven Fenster wandert.

    Gruss

    mikeb69
    Danke erstmal für alle Antworten.

    Hier habe ich ein Code gefunden:

    VB.NET-Quellcode

    1. Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) _
    2. As Short
    3. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    4. Dim result As Integer = 0
    5. For i = 6 To 255
    6. result = 0
    7. result = GetAsyncKeyState(i)
    8. If GetAsyncKeyState(vKey:="A") Then
    9. Me.Visible = False
    10. End If
    11. 'If My.Computer.Keyboard.CapsLock Or _
    12. ' My.Computer.Keyboard.ShiftKeyDown Then
    13. ' If result = -32767 Then
    14. ' TextBox1.Text += UCase((Chr(i)))
    15. ' End If
    16. 'Else
    17. ' If result = -32767 Then
    18. ' TextBox1.Text += LCase((Chr(i)))
    19. ' End If
    20. 'End If
    21. 'If GetAsyncKeyState(Keys.Alt) = -32767 Then
    22. ' TextBox1.Text = TextBox1.Text
    23. 'End If
    24. Next
    25. End Sub


    Ich habe es Beispielsweise mal mit der Taste "A" probiert, bekam aber leider folgenden Fehler: "Message=Ungültige Konvertierung von der Zeichenfolge A in Typ Integer."
    Wenn ich das benutze, was auskommentiert wurde(habe ich selber auskommentiert), funktioniert er wie ein Keyloger, und ich verstehe einfach den Code nicht....
    Konstante VK_A = &H41 deklarieren.
    In abfrage:

    VB.NET-Quellcode

    1. dim result As Integer
    2. result =GetAsyncKeyState(VK_A)
    3. If result > "0" then
    4. //deine weitere Code
    5. End If



    ...übrigens in MSDN steht alles klar und deutlich beschrieben, welche argumente müssen übergeben werden !

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

    MB-Tech schrieb:

    Ich habe genau zu sowas mal ein Tutorial gemacht.

    s. HIER!

    LG

    Ich habe mal zum testen das hier probiert:

    VB.NET-Quellcode

    1. If GetKey(Keys.A) = True Then
    2. TextBox21.Text += "Die Taste A wurde gedrückt!"
    3. End If


    Aber ich bekomme folgenden Fehler:
    "Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement TextBox21 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."
    Ich habe es jetzt so gemacht:

    VB.NET-Quellcode

    1. If GetAsyncKeyState(Keys.A) Then
    2. TextBox1.Text += "Test A"


    Funktioniert Prima, leider erscheint nicht nur einmal "Test A" sondern ca. 15 mal. Der Interval meines Timers beträgt 100.
    Woran könnte es liegen?
    Danke..

    Ich habe ganz normal diesen Code benutzt:

    VB.NET-Quellcode

    1. Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) _
    2. As Short
    3. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    4. Dim result As Integer = 0
    5. For i = 6 To 255
    6. result = 0
    7. result = GetAsyncKeyState(i)

    Der Intervall vom Timer ist bei mir auf 10...

    Dann habe ich gaaaaanz normal diesen Code hier als If-Abfrage benutzt:

    VB.NET-Quellcode

    1. If GetAsyncKeyState(Keys.A) = -32767 Then

    Vorher habe ich " = -32767" nicht hingemacht...