Tasten

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Hallo,
    Ich habe versucht ein Programm zu machen, welches einen Text senden wenn ich die Enter drücke.
    Nun habe ich folgendes Problem: Wenn ich die Enter gedrückt halte, werde ich zugespammt.
    Wie kann ich machen, dass der Text nur gesendet wird, wenn ich neu auf Enter drücke?

    Hier der Teil meines Codes:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) As Short
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. End Sub
    4. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    5. If GetAsyncKeyState(Keys.Enter) Then
    6. My.Computer.Keyboard.SendKeys(TextBox1.Text)
    7. End If
    8. End Sub
    9. End Class

    Müller
    Versuchs mal so:

    VB.NET-Quellcode

    1. If GetAsyncKeyState(Keys.Enter) Then
    2. My.Computer.Keyboard.SendKeys(TextBox1.Text)
    3. Timer1.Stop
    4. End If


    Edit: Kannst ja noch ein überprüffungs Timer machen der nachsieht ob Timer1 gerade ausgeführt wird. Also so gemeint:

    VB.NET-Quellcode

    1. Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick 'Timer2 sollte aber auch gleich beim Starten der Exe ausgeführt werden Enabled = True
    2. If Timer1.Enabled = False then
    3. Timer1.Start

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

    Ist DEINE Anwendung focussiert, wenn du Enter drückst, nutze das KeyDown und KeyUp-Event, um eine boolsche Variable zu setzen/zurückzusetzen.
    Im Keydown fragst du Keycode und Variable vor dem Senden ab (Wenn false, dann senden und Variable setzen). Im KeyUp setzt du die Variable zurück.

    Ist eine andere Anwendung focussiert, setze ebenfals nach dem Senden eine Boolsche Variable. Im (noch fehlenden) Else-Zweig deiner If-Verzweigung im TimerTick-Event setzt du sie zurück.

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Präzisierung zu Vatter:
    Nutze KeyDown (Einzeldruck) und KeyPress (bei AutoRepeat).
    Willst Du die Tastendrücke in Deiner laufenden Anwendung haben, musst Du nichts weiter tun.
    Willst Du Tastendrücke z.B. an das NotePad senden, nutze SendKeys.Send(bla), dies sendet die Tasten an das Programm, das den Fokus hat.
    Willst Du Tastendrücke an ein beliebiges Programm senden, nutze die API-Funktion SendMessage(). Dazu findest Du im Forum beliebig viel Information.
    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!