none
Abfragen ob eine Taste gedrückt wurde, und weitern Tastendruck veranlassen

    Frage

  • Hallo,
    Ich möchte gerne Abfragen ob eine bestimmte Taste auf der Tastatur gedrückt wurde, Zb die Taste " 4 " und wenn dies geschen ist, soll mein Programm selbstständig die Taste  zb"1" eine sekunde warten, und dann die Taste "2" drücken. Wie läst sich soetwas realisieren vorallem wenn meine Anwendung im hintergrund läuft. Hintegrund der ganzen Sache ist das meine Tochter gerade ein Spiel spielt, in dem dieverse Tastenkombinationen  nötig sind um  bestimmte Aktionen auszuführen. Da sie aber im eifer des Gefechts  manchmal die falsche Taste drückt möchte ich mit meinen Programm dafür sorgen das sie nur die erste Taste drücken muss, und die andernen  Tasten automatisch gedrückt werden. Ist sowas möglich ??? Kann mir vllt Jemand ein kleines beispiel mit dem oben gennaten  Zahlen zeign, wenn ich anhand einens Beispiels sehe wie ich vorgehen muss, sollten andere Tasten kombinationen kein Problem mehr sein.
    Vielen Dank

    Lg Ronny

    Mittwoch, 13. Januar 2010 11:50

Antworten

Alle Antworten

  • Kann mir denn niemand einen Tipp geben, oder wenigsten sagen wie ich eine bestimmte Taste, Systemweit abfrage, wenn ich google frage  bekome ich 1000 Sachen, wie man sich einen Keylogger baut, das ist aber nicht meine Absicht ausserdem Illegal, möchte wirklich nur wissen wie ich eine ganz bestimmte Taste abfragen kann, auch wenn meine Anwendung im Hintergrund läuft.

    Gruß Ronny
    Donnerstag, 14. Januar 2010 13:24
  • Hallo Ronny,

    was Du suchst ist ein Keyboard Hook und ein Keylogger tut zuerst einmal das gleiche.

    Eine Lösung in C#:  Low-Level Keyboard Hook in C#
    Herfried K. Wagner hat eine Lösung für VB Classic: http://dotnet.mvps.org/vb/articles/keyboardhook/
    (Die Declares müssen auf .NET Verhältnisse angepasst werden, siehe C# Lösung).

    Einen Tastendruck auslösen kannst Du via keybd_event, in anderem Zusammenhang in
    Lautstärke verändert nicht schrittweise


    Gruß Elmar
    • Als Antwort markiert Wild-Life78 Freitag, 15. Januar 2010 13:14
    Donnerstag, 14. Januar 2010 14:28
  • Danke erstmal bin schon etwas weiter.    " Mühsam ernährt sich das Eichhörnchen"

    Ich habe es jetzt in einem kleinen Beispiel geschaft die Taste "4" abzufragen funktioniert wunderbar ( auch im wenn das Spiel im Vordergund ist)
    das Senden der neuen Tastendrücke habe ich mit "SendKeys" gemacht.
    Habe aber noch 2 Fragen wie realsiere ich ein Pause( ca 1 Sekunde), zwischen dem Senden mit Sendkeys nach jedem Tastendruck ?
    Wie Sende ich mit SendKeys das einfache drücken von "Strg"

    Hier mal mein kleines Beispiel

    Public Class Form1
        Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Long
    
        Private Const VK_4 = &H34  ' Taste 4
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Dim Retval As Long
            Retval = GetAsyncKeyState(VK_4)
            If CBool(Retval And &H8000) Then
                'wie bekomme ich hier eine Pause von einer Sekunde rein ????
                My.Computer.Keyboard.SendKeys("3")
                ' auch hier eine Sekunde Pause ???
                My.Computer.Keyboard.SendKeys("2")
                ' und hier auch
                My.Computer.Keyboard.SendKeys("x")
                'Mit dem Strg Senden weiß ich noch garnicht, habe nichts funktionierendes gefunden
                ' soll nur STRG gesendet werden sonst nix
                My.Computer.Keyboard.SendKeys("^")  'Hier möchte ich "STRG" , "^" funktioniert aber nicht ??? 
    
            Else
    
            End If
        End Sub
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Timer1.Start()
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Timer1.Stop()
        End Sub
    End Class
    Gruß Ronny
    Donnerstag, 14. Januar 2010 15:21
  • Hallo Ronny,

    Für die Pause verwende: System.Threading.Thread.Sleep(1000)

    „Strg“ ist so allein gedrückt oder muss man noch etwas im Zusammenhang mit CTRL drücken?

    Grüße,

    Robert

    • Als Antwort markiert Wild-Life78 Freitag, 15. Januar 2010 13:14
    Donnerstag, 14. Januar 2010 16:47
  • Danke Robert,
    Das mit mit dem Sleep klappt Super, was das Strg bzw Ctrl  angeht, das ist allein gedrückt , also nix weiter dazu. Aber "^" geht nicht gibt es noch eine andere möglichkeit das drücken von Strg bzw Ctrl zu Simmulieren???

    Grüße,

    Ronny
    Donnerstag, 14. Januar 2010 19:52
  • Donnerstag, 14. Januar 2010 20:17
  • Danke Bernd,
    Aber Leider funktioniert auch diese Variante nicht, ist das selbe wie bei SendKeys alle anderen Tasten gehen, nur Strg geht nicht.
    Aber ich mach dazu einen neuen Tread auf da ja meine eigentlichen Fragen beantwortet sind.


    Gruß Ronny
    Freitag, 15. Januar 2010 13:14
  • Hallo Ronny,

    ein neur Thread muß es dafür nicht sein.
    schau Dir mal an: http://www.codeproject.com/KB/system/keyboard.aspx

    Bei Control und Konsorten muß man zwischen dem Scan Code -
    direkt von der Tastatur und unterscheidet auch links/rechts -
    und dem sich am Ende ergebenen Tastaturcode unterscheiden.

    Wobei Spiele auch mal zwischen Control links und rechts unterscheiden
    und direkt auf Scancode-Ebene auswerten.

    Gruß Elmar

    Freitag, 15. Januar 2010 13:39