none
Aufrufen von My.Computer.Keyboard.SendKeys in Threads

    Frage

  • Hallo, 

    ich wollte mir in Visual Basic einen einfachen Spammer machen. Das Programm schreibt eine Text, den der Benutzer vorher in eine TextBox eingegeben hat, immer wieder in ein ausgewähltes Textfeld rein und drückt anschließend ENTER. Damit sich die Benutzeroberfläche nicht aufhängt, habe ich das ganze in eine Thread gepackt. Doch jetzt funktioniert es nicht mehr! Bitte helft mir!

    Hier der Fehlercode:

    ----------------------------------------------------------------

    Ein Ausnahmefehler des Typs "System.InvalidOperationException" ist in System.Windows.Forms.dll aufgetreten.

    Zusätzliche Informationen: SendKeys kann nicht innerhalb der Anwendung ausgeführt werden, da diese Anwendung keine Windows-Meldungen verarbeitet. Ändern Sie die Anwendung so, dass sie Meldungen behandelt, oder verwenden Sie die SendKeys.SendWait-Methode.

    ----------------------------------------------------------------

    Hier mein Programm:

    Public Class Form1
        'Kurz zu den Namen: Button1 ist der Startbutton, Button2 der Stobbutton, TextBox1 die Eingabemöglichkeit und Label1 gibt den Status des Programms an
    
        'bo ist dafür wichtig, ob der Thread aufhören soll, zu arbeiten.
        Public bo As Boolean = True
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            'Überprüfen, ob auch text da ist.
            If TextBox1.Text <> "" Then
                'Thread definieren und starten
                Dim str = New System.Threading.Thread(AddressOf spammen)
                str.Start()
            Else
                MessageBox.Show("Es ist kein Text vorhanden", "Warnung", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
            End If
    
        End Sub
    
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            'zum Stoppen vom Thread str
            bo = False
            Label1.Text = "Ready"
            Label1.Refresh()
            Button1.Enabled = True
            Button2.Enabled = False
        End Sub
    
    
        Sub spammen()
            'das ist der thread
            Button1.Enabled = False
            Button2.Enabled = True
            System.Threading.Thread.Sleep(5000)
            Label1.Text = "Spamming"
            Label1.Refresh()
            Do While bo = True
                espammen()
                Label1.Text = DateTime.Now.ToLongTimeString.ToString
                Label1.Refresh()
            Loop
            Label1.Text = "Ready"
            Exit Sub
        End Sub
    
        Sub espammen()
            'die Methode zum Spammen, jetzt nur kommentiert da das Programm sonst abstürzt!
            My.Computer.Keyboard.SendKeys(TextBox1.Text)
            My.Computer.Keyboard.SendKeys("{ENTER}")
        End Sub
    
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            'Damit die Threads laufen:
            Control.CheckForIllegalCrossThreadCalls = False
    
            Button2.Enabled = False
        End Sub
    End Class


    • Bearbeitet einhertz Donnerstag, 30. Januar 2014 14:59 Rechtschreibfehler
    Donnerstag, 30. Januar 2014 14:59

Antworten