MouseClick Problem

  • Ich nehme als Beispiel einfach mal:
    MouseClick("", 181, 135, 1, 100)

    Das ist ja relativ langsam. An der Position 181, 135 ist bei mir eine Verknüpfung. Klickt man eine Verknüpfung/Datei einmal an sieht man ja ein blaues Quadrat um die Datei, was bedeutet: ausgewählt.

    Mein Problem ist, dass bei MouseClick AutoIt erst zu der Position hinfährt, dann eine Pause hat und dann klickt. Versucht einfach mal während das Script ausführt die Maus wegzuziehen, das Resultat: Unter Umständen wird die Datei nicht getroffen (bzw. die Position) => Das blaue Quadrat erscheint nicht.

    Gibt es nicht die Möglichkeit bei Autoit, dass der Click unter allen Umständen trifft?

    Einmal editiert, zuletzt von SenA (4. November 2010 um 13:33)

  • Ja, die Zeit auf 0 machen oder danach nochmal den gleichen Klick wie gerade schon gesagt ausführen

  • BugFix lol^^ Das war nur ein Bsp um zu verhindern, dass Leute sagen: Es stimmt garnicht, dass es eine Pause gibt, zwischen Ziel erreicht und klick.
    Ich will einfach sicher gehen, dass der Click das Ziel auch erreicht.

    Edit: Tweaky
    soweit ich weiß verhindert Blockinput nicht nur der Aktionen des Users, sondern auch das MouseMove des Scriptes

  • Wozu brauchst du mouseclick() unbedingt? Die meisten Dinge kann man auch ohne mouseclick() erreichen, gerade Mausklicks rein nach Koordinaten sind extremst fehleranfällig und in der Regel nicht auf fremden Systemen nutzbar.
    Wenn du wie in deinem Beispiel ein Programm starten willst nimm doch einfach run().
    Wenn du In einem Fenster einen bestimten Button oder Ähnliches anklicken willst dann benutz statt dem normalen Mausklick mit Koordinaten lieber controlclick() und ermittle zuvor mit Au3Info alle relevanten Infos um das richtige Elemnt im Fenster anzuklicken.
    Wenn du Elemente auf Webistes ansteuern willst benutz die dafür gedachten Funktionen der IE.au3 oder FF.au3, die ebenfalls anhand des Quellcodes sehr viel exakter sein können.

  • Das kam zu nichts. Deswegen suche ich hier nach alternativen zu MouseClick um die Präzesion zu garantieren. Selbst in AutoIt muss es doch eine Lösung geben

  • Die Maus ist für den User da, wenn du willst dass der User kurz die Finger von der Maus nimmt, dann sags ihm doch ;)

    [autoit]

    Msgbox(64, "Eine Bitte...", "Lass mal kurz für ne Sekunde deine Finger von der Maus, Danke!", 5)

    [/autoit]


    ;falls kein User da ist, gehts in 5 Sekunden weiter... 8o

  • Eine Verknüpfung kannst du mit

    [autoit]

    ShellExecute

    [/autoit]

    starten.
    Das ist zu 1000% weniger Fehleranfällig als ein MouseClick auf die Verknüpfung.

    Eigentlich möchte er keine Verknüpfung klicken,
    er will in paint auf position x=100, y=100 einen blauen pixel setzen, ohne dass jemand dazwischen funkt ^^

  • Wirklich sinnvoll ist das ganze trotzdem nicht, wie auch schon im Ursprungsthread erwähnt wurde wäre ein Screencapture Programm wie Camtasia wesentlich besser geeignet.
    Schon alleine deshalb, weil das Programm niemals auf allen heute gängigen Betriebssystemen korrekt arbeiten würde. Es gibt durchaus Unterschiede zwischen den Paint Versionen von Win98/XP/Vista/7.

  • Ungetestet & im Browser geschrieben:
    (Tipp: MouseMove+Down+Up ist scheinbar schneller wenn der Klick nicht auf dem gleichen Pixel stattfindet.)

    [autoit]

    Func SaveMouseClick($Button, $X, $Y, $Clicks, $Speed)
    BlockInput(1)
    MouseMove($X, $Y, $Speed)
    For $i = 0 To $Clicks
    MouseDown($Button)
    MouseUp($Button)
    Next
    BlockInput(0)
    EndFunc

    [/autoit]
  • Mit dieser Funktion wird der Ungenauigkeit bei Bewegungen etwas verkleinert als bei Mouseclick. Sie ist aber trotzdem vorhanden.
    Btw: Es hat seinen Grund warum ich es mit Paint mache.

  • Dann versuch mal das hier, hilft dir denke ich weiter.
    grad mal rumprobiert und was schönes gebastelt.
    Sollte soweit fehlerfrei funktionieren.

    [autoit]

    ;Array für meine Func unten
    Dim $Klicks[2]
    $Klicks[0] = "400,600,2,left,0" ;X, Y, Clicks, Button, Speed
    $Klicks[1] = "200,700,2,left,0"

    [/autoit][autoit][/autoit][autoit]

    ;Klicks starten
    _SecureMouseClick_byArray($Klicks)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _SecureMouseClick_byArray($ArrayClicks)
    BlockInput(1)
    For $i1 = 0 To UBound($ArrayClicks) -1
    $Clickinfo = StringSplit($ArrayClicks[$i1], ",", 1)
    MouseMove($Clickinfo[1], $Clickinfo[2], $Clickinfo[5])
    For $i2 = 0 To $Clickinfo[3]
    MouseDown($Clickinfo[4])
    MouseUp($Clickinfo[4])
    Next
    Next
    BlockInput(0)
    EndFunc ;==>SecureMouseClick_byArray

    [/autoit]

    Einmal editiert, zuletzt von Sen (4. November 2010 um 12:20)

  • Das scheint zu funktionieren danke vielmals :rock:

    2 Mal editiert, zuletzt von SenA (4. November 2010 um 13:05)