Mehrer Mauskoordinaten ermitteln, speichern und an einer anderen Stelle verwenden

  • Hallo zusammen!

    Ich bin neu im Forum und beschäftige mich seit dem 22. Februar 2013 mit Autoit.
    Nun brauche ich eure Hilfe.
    Und zwar möchte ich folgendes:

    -Mauskoordinaten per linken Maustaste ermitteln und speichern (so ungefähr 5 Koordinaten)
    -diese ermittelten Mauskoordinaten dann an einer anderen Stelle im Script verwenden

    Soweit habe ich alles fertig, aber bei dieser Sache blicke ich einfach nicht durch.

    Vielleicht kann mir jemand von euch ein Beispiel posten?

    Ich bedanke mich im voraus!

    Gruß
    Sirius

    Einmal editiert, zuletzt von Sirius (24. Februar 2013 um 20:57)

  • Hi,
    welches Programm soll den damit automatisiert werden?

    Zitat

    Soweit habe ich alles fertig,

    Es macht immer Sinn, den Code, den man bereits hat, anzuhängen bzw. zu posten, damit man konkret helfen kann! Also poste bittte dein bisher erstelltes Script!

  • Hallo
    Endlich kann ich auch mal was antworten und muss nicht immer nur fragen... ;D

    Also gehen tut das.
    Aber wie Andy sehe ich nicht ganz den Nutzen.


    Was meinst du eig mit Mehrere? Verschiede?
    Also in die ine ecke bewegen links klick speichern dann nächste ecke links klick speichern... Etwa so oder wie?
    Edit//
    Andy und andere die Ahnung haben: eig ist das nur zum Programmieren von Bots sinnvoll oder?

    Einmal editiert, zuletzt von Gandalf (24. Februar 2013 um 17:55)

  • Gandalf:
    Naja, ...
    Ich habe auch mit solchen "klick" Programmen angefangen.
    Es vermittelt anfangs die Syntax der Funktionen und man lernt schon mal Funktionen die man kennt sinnvoll zu verwenden.
    Zudem programmiert er laut seinen Angaben erst seit 2 Tage.

    So schnell hat man also die Grundlagen nicht drauf (Je nachdem ob schon vor Erfahrung von anderen Programmiersprachen vorhanden ist oder nicht).
    Dementsprechend ist das ganze nachvollziehbar.


    Sirius:
    Es ist immer praktisch den Sourcecode mit zu liefern. Nur so können wir dir eine effektive Antwort geben. Es kann nämlich sein, dass du uns was erklärst, aber was komplett anderes meinst. Da hilf der Sourcecode einfach bei dem verstehen deines Problems. Beispielsweise wäre die Verwendung von Variablen / Arrays sinnvoll. Ich habe dir mal ein Beispiel getippt. Falls es noch Fragen geben sollte, kannst du hier einfach nachfragen.

    Spoiler anzeigen
    [autoit]

    ;// Mauskoordinaten per linken Maustaste ermitteln und speichern (so ungefähr 5 Koordinaten)
    ;// --> Wenn ich das ganze jetzt richtig verstanden habe, willst du die Koordinaten abspeichern,
    ;// wo du einen linken Mausklick ausführst?

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

    ;// diese ermittelten Mauskoordinaten dann an einer anderen Stelle im Script verwenden
    ;// --> Dafür speicherst du die Koordinaten in Variablen / Arrays. So kannst du diese dann nach
    ;// bedarf einfach wieder verwenden.

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

    ;// Für die verwendung von _Ispressed() (Zum ermitteln ob linke Maustatse gedrückt wurde).
    #include <Misc.au3>

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

    ;// $iCounter -> In dieser Variable wird gezählt, wie oft die linke Maustatse betätigt wurde.
    ;// $aiCoord -> Hier werden später die Koordinaten abgespeichert.
    Global $iCounter, $aiCoord[5][2]

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

    ;// Die Schleife wird solange ausgeführt, bis die linke Maustaste 5x betätigt wurde.
    While $iCounter < 5
    Sleep(10)
    ;// Wenn die linke Maustaste gedrückt wurde, dann die Funktion _SaveCoord() ausführen.
    If _IsPressed('01') Then _SaveCoord()
    WEnd

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

    ;// Wenn $iCounter die 5 Mausklicks erreicht hat, dann werden die Koordinaten ausgegeben:
    MsgBox(262144, 'Koordinaten:', 'Klick 1:' & @TAB & 'X -> ' & $aiCoord[0][0] & @TAB & 'Y -> ' & $aiCoord[0][1] & @CRLF & _
    'Klick 2:' & @TAB & 'X -> ' & $aiCoord[1][0] & @TAB & 'Y -> ' & $aiCoord[1][1] & @CRLF & _
    'Klick 3:' & @TAB & 'X -> ' & $aiCoord[2][0] & @TAB & 'Y -> ' & $aiCoord[2][1] & @CRLF & _
    'Klick 4:' & @TAB & 'X -> ' & $aiCoord[3][0] & @TAB & 'Y -> ' & $aiCoord[3][1] & @CRLF & _
    'Klick 5:' & @TAB & 'X -> ' & $aiCoord[4][0] & @TAB & 'Y -> ' & $aiCoord[4][1] & @CRLF)

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

    Func _SaveCoord()
    ;// Schleife solange ausführen, bis die linke Maustatse wieder losgelassen wird.
    While _IsPressed('01')
    Sleep(10)
    WEnd

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

    ;// Speichern der X Koordinate.
    $aiCoord[$iCounter][0] = MouseGetPos(0)
    ;// Speichern der Y Koordinate.
    $aiCoord[$iCounter][1] = MouseGetPos(1)

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

    ;// $iCounter um eins erhöhen.
    $iCounter += 1
    EndFunc

    [/autoit]

    2 Mal editiert, zuletzt von Yjuq (24. Februar 2013 um 18:59)

  • Hallo

    @make-Grafik hast du dein skript getestet?

    Im Übrigen habe ich auch mal so angefangen (und bin immer noch nicht viel weiter :()

    Ich persönlich finde Array viel zu kompliziert um damit zu beginnen...

    Er kann doch auch einfach immer ne neue Variable befüllen.

  • Selbstverständlich habe ich mein Script getestet.
    Das mit den Arrays ist bewusste Schikane (:D).

    Begründe mir doch bitte einmal, weshalb Arrays für den Anfang zu schwer sein sollten?
    Klar sollte man vor den Arrays sich mit Variablen auseinander setzen.
    Aber um Arrays kommt man so oder so nicht herum.

  • Zu Make-Grafiks Skript:
    Wenn eine unbekannte Anzahl von Koordinaten gespeichert werden soll, bietet sich eine Queue (Oder ein Stack) an.

    Spoiler anzeigen
    [autoit]


    #include <Misc.au3>

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

    HotKeySet("{ESC}", "_Exit")

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

    Local $aCoord[2]
    $aCoord[0] = ObjCreate("System.Collections.Queue")
    $aCoord[1] = ObjCreate("System.Collections.Queue")
    $hDll = DllOpen("user32.dll")

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

    While True ;Hauptschleife
    Sleep(50)
    If _IsPressed("01", $hDll) Then

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

    $aCoord[0].Enqueue(MouseGetPos(0))
    $aCoord[1].Enqueue(MouseGetPos(1))

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

    Do
    Sleep(10)
    Until Not _IsPressed("01", $hDll) ;Oncepressed
    EndIf
    WEnd

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

    Func _Exit()
    $sMessage = "Koordinaten: " & @CRLF
    Do
    $sMessage &= "(" & $aCoord[0].Dequeue & "|" & $aCoord[1].Dequeue & ")" & @CRLF
    Until $aCoord[0].Count = 0
    MsgBox(0, "", $sMessage)
    Exit
    EndFunc

    [/autoit]

    chess

    Edit:
    Naja, zum Thema "Einfachheit für den Anfang" passt das wohl nicht... :whistling:

  • Das freut mich! :)

    Dann tu mir doch bitte den gefallen, und klicke in deinen aller ersten Post auf [Bearbeiten].
    Wenn dann die Seite geladen ist, schaust du weiter oben auf der Seite.
    Dort müsste irgendwo "Präfix" stehen. Diesen stellst du auf [gelöst].
    Danach klickst du auf [Absenden].

    Das wäre sehr gut, damit das ganze von außen sichtbar ist, dass dieser Thread gelöst wurde.