AutoKlicker stürzt ab

  • VB.NET

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

    AutoKlicker stürzt ab

    Hallo.

    Ich habe in Visual Basic einen AutoKlicker geschrieben. Wenn ich jedoch den Timer
    starte, stürzt es ab.

    Ich benutze folgende Sachen:
    3x Button = Start, Stop, Test
    1x TextBox = (Geschwindigkeit Testen mit dem Test-Button)
    3x RadioButton = Langsam, Normal, Schnell
    1x Timer

    Folgender Code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
    3. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    4. Windows.Forms.Cursor.Position = New System.Drawing.Point(Windows.Forms.Cursor.Position)
    5. mouse_event(&H2, 0, 0, 0, 1)
    6. mouse_event(&H4, 0, 0, 0, 1)
    7. End Sub
    8. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    9. Timer1.Start()
    10. End Sub
    11. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    12. Timer1.Stop()
    13. End Sub
    14. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    15. TextBox1.Text = TextBox1.Text + 1
    16. End Sub
    17. Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
    18. Timer1.Interval = (200)
    19. End Sub
    20. Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged
    21. Timer1.Interval = (100)
    22. End Sub
    23. Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged
    24. Timer1.Interval = (50)
    25. End Sub
    26. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    27. End Sub
    28. End Class


    Wenn ich auf Start klicke wird folgender Abschnitt makiert:

    VB.NET-Quellcode

    1. mouse_event(&H2, 0, 0, 0, 1)

    Fehlermeldung:
    PInvokeStackImbalance wurde erkannt.
    Ein Aufruf an die PInvote-Funktion "AutoKlicker! AutoKlicker.Form1::mouse_Event hat
    das Gleichgewicht des Stapels gestört Warscheinlich stimmt die verwltete PInvoke-Signatur
    nicht mit der nicht verwaltenen Zielsignatur überein. Überprüfen Sie, ob die Aufrufkonvention
    und die Parameter PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen.

    Ich hoffe ihr könnt mir beim beheben des Fehlers helfen.
    Also wieso der Fehler kommt kann ich dir nicht sagen aber vlt. paar andere Sachen zum Code

    Was soll das Bezwecken?

    VB.NET-Quellcode

    1. Windows.Forms.Cursor.Position = New System.Drawing.Point(Windows.Forms.Cursor.Position)


    Setzte Cursor auf Postion Cursor?? Sinn??

    Textbox1.Text ist ein String und kann nicht mit dem mathematischen Operator addiert werden.

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Klicker As Threading.Thread
    4. <System.Runtime.InteropServices.DllImport("User32.Dll")> Public Shared Function mouse_event(ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer) As Integer
    5. End Function
    6. Private Sub Mausklick(Optional ByVal Button As MouseButtons = Windows.Forms.MouseButtons.Left)
    7. Const MOUSEEVENTF_ABSOLUTE = &H8000 : Const MOUSEEVENTF_LEFTDOWN = &H2 : Const MOUSEEVENTF_LEFTUP = &H4 : Const MOUSEEVENTF_MIDDLEDOWN = &H20 : Const MOUSEEVENTF_MIDDLEUP = &H40 : Const MOUSEEVENTF_MOVE = &H1 : Const MOUSEEVENTF_RIGHTDOWN = &H8 : Const MOUSEEVENTF_RIGHTUP = &H10 : Select Case Button : Case Windows.Forms.MouseButtons.Left : mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) : mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) : Case Windows.Forms.MouseButtons.Middle : mouse_event(MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0) : mouse_event(MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0) : Case Windows.Forms.MouseButtons.Right : mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0) : mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0) : End Select
    8. End Sub
    9. End Class


    KeyPreview der Form auf True setzen, in KeyDown Event z.B. die Taste F6 abfragen.
    Wenn die Taste jedrückt folgendes:

    VB.NET-Quellcode

    1. Klicker = New Threading.Thread(Sub()
    2. Try
    3. While True
    4. Threading.Thread.Sleep(1000) : Mausklick()
    5. End While
    6. Catch ee As Threading.ThreadAbortException
    7. End Try
    8. End Sub) : Klicker.IsBackground = True : Klicker.Start()


    Mit der Maus dahin fahren wo du willst und F6 drücken.
    Probier Du mal aus, 20 Mal pro Sekunde mit der Maus zu klicken.
    Ist ein solches Intervall überhaupt sinnvoll?
    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!