MouseClick() ist nicht gleich Mausklick?

  • Hallo zusammen,

    ich habe folgendes "Phänomen":

    In meiner While-Schleife habe ich folgenden Aufruf:

    Code
            Case $GUI_EVENT_PRIMARYDOWN
                _GUI_EVENT_PRIMARYDOWN()

    In der Funktion _GUI_EVENT_PRIMARYDOWN() gehts wie folgt los:

    Code
        $aInfo = GUIGetCursorInfo($hGui)
        If $aInfo[4] = $hTreeView Then

    Es ist also so: Wenn mit der Maus mit der linken Taste in den Treeview geklickt wurde, dann soll er gewisse Dinge durchführen. Funktioniert tadellos.

    Ich wollte nun gewisse Dinge automatisieren und bediene mich der Funktion MouseClick. Diese klickt in den Treeview rein (man sieht es ja an dem Item was dann blau ausgewählt wird) aber es passiert nichts. Er löst also nicht die Bedingung "If $aInfo[4] = $hTreeView Then" aus. Wenn ich das ganze mit MsgBox(0,"",$aInfo[4]) überprüfe, sehe ich auch dass eine ganz andere Control-ID ausgeworfen wird.

    Also Beispiel: Mache ich den reellen Mausklick wirft de Messagebox die ID 4 aus. Baue ich einen Testbutton ein der den MouseClick im TreeView ausführt erhalte ich die ID 20 - nämlich die vom Button... warum auch immer.

    Also habe ich nun versucht das ganze mal mit ControlClick auszuführen. Aber hier dasselbe Phänomen. Er klickt das TreeView Item an (es wird blau) aber es scheint nicht identisch mit dem reellen Mausklick zu sein.

    Hat da jemand schon Erfahrung mit gesammelt?

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

    Einmal editiert, zuletzt von mirko2002 (28. Dezember 2018 um 11:39)

  • Ok hier mal folgendes Codebeispiel:


    Aufpassen in Zeile 50, dort habe ich einfach nur die Coords x200 und y200 angegeben, der Mauscursor wandert also je nach Auflösung bei euch sonstwohin.

    Beim manuellen Mausklick erhalte ich die ID 3 - so sollte es korrekt sein. Bei automatischen Klick registriert er nur den manuellen Mausklick auf den Button, aber nicht den, der automatisch durch die Funktion aufgerufen wird.

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Wie ich das sehe sagt die Funktion:

    Zitat

    GUIGetCursorInfo

    Gets the mouse cursor position relative to GUI window.

    GUIGetCursorInfo ( [winhandle] )

    Parameters

    winhandle [optional] The handle of the window to use. If omitted the "current" window will be used.

    Return Value

    Success: a five-element array that containing the mouse cursor information:
    $aArray[0] = X coord (horizontal)
    $aArray[1] = Y coord (vertical)
    $aArray[2] = Primary down (1 if pressed, 0 if not pressed)
    $aArray[3] = Secondary down (1 if pressed, 0 if not pressed)
      $aArray[4] = ID of the control that the mouse cursor is hovering over (or 0 if none)
    Failure: sets the @error flag to non-zero.

    Nicht aus, das du die Control ID des geklickten Controls bekommst, sondern dem über dem der Cursor aktuell ist. Daher müsste er dir die ID vom Button (der den "autoklick" auslöst) bekommen, was ja auch so ist, wenn ich dich richtig verstanden habe.

    Der Unterschied ist einfach ein virtueller Mausklick (MouseClick(); Cursor bleibt wo er ist) vs. tatsächlicher Mausklick (Benutzereingabe; Cursor wird zum Ziel bewegt). Daher kannst du dies nicht mit GUIGetCursorInfo() auslesen.

    Wenn du den Cursor mittels MouseMove() an die Position bewegst und dann GUIGetCursorInfo() machst, müsste er dir dir die richtige ID ausspucken. (Tipp: Erst MouseMove(), dann MouseClick(), dann GUIGetCursorInfo() ) Habe ich selber aber auch noch nicht getestet, daher keine Gewähr!

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

    Mal anders gefragt: Wozu brauchst du das? du kannst doch beim drücken von Button 2 die Funktion _button1() einfach aufrufen. Warum der komplizierte Umweg über einen Mausklick?

    5 Mal editiert, zuletzt von Moombas (28. Dezember 2018 um 14:33)

    • Offizieller Beitrag

    Eine per ControlClick oder MouseClick ausgelöste Mausaktion ist nicht identisch mit einem physischen Mausklick. Die Informationen landen nicht in der GuiCursor-Abfrage aus der du die Ctrl-ID abfragst. Da musst du eine eigene Funktuin registrieren, die die Aktivitäten im Treeview prüft und entsprechend reagiert.

    EDIT: Moombas war schneller.

  • Hm da muss ich euch etwas korrigieren. Bei einem MouseClick bewegt er ebenfalls den Cursor auf das vogegebene Ziel. Erst dann wird der Click ausgelöst.

    Nichtsdestotrotz habe ich es trotzdem mal probiert, vorher ein MouseMove auf dieselben Koordinaten zu setzen und auch hier landet der anschließende Klick ins Leere.

    Ok Kommando zurück... ich hab vergessen das GUIGetCursorInfo() nachträglich noch ausführen zu lassen... damit geht es :)

    Vielen dank für die Hinweise. Tolles Forum.... kann ich immer nur wiederholen!

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

    Einmal editiert, zuletzt von mirko2002 (28. Dezember 2018 um 15:00)