_MouseTrapCircle

  • EDIT:

    Hinweise von Bitnugger eingearbeitet:

    Ein Nebenprodukt aus einem Projekt von mir, vielleicht auch nützlich für euch.

    Mit der Funktion _MouseTrapCircle() wird die Maus in einem definierten Kreis gefangen.

    Ist die Maus bei Aktivieren der Funktion außerhalb des Kreises, wird sie bei der ersten Mausbewegung in den Kreis bewegt und kann diesen nicht wieder verlassen, bis die Funktion deaktiviert wird.

    Bei Aufruf der Funktion wird die Maus in den Kreis verschoben und kann diesen bis zur Deaktivierung nicht mehr verlassen.

    Der Kreis wird definiert über den Mittelpunkt (Standard) oder die linke obere Ecke des umlaufenden Rechtecks sowie dem Durchmesser.


    Weiteres Bsp. (Kreis nicht auf Gui) hinzugefügt.

  • Hehe... is ja mal very cool! ;-)

    Ist die Maus bei Aktivieren der Funktion außerhalb des Kreises, wird sie bei der ersten Mausbewegung in den Kreis bewegt ...

    Besser fände ich, wenn die Maus direkt bei Aktivierung an den Innenrand des Kreises bewegt wird... evtl. auch als optionalen Parameter mit angeben.


    Gar nicht gut finde ich, dass die Maus beim Versuch den Kreis zu verlassen, in die Mitte des Kreises bewegt wird.

  • Zitat von @Bitnugger

    Besser fände ich, wenn die Maus direkt bei Aktivierung an den Innenrand des Kreises bewegt wird... evtl. auch als optionalen Parameter mit angeben.

    Das sollte kein Problem sein.

    Zitat von @Bitnugger

    Gar nicht gut finde ich, dass die Maus beim Versuch den Kreis zu verlassen, in die Mitte des Kreises bewegt wird.

    OK, wenn ich den ersten Punkt umsetzte lässt sich das auch einfacher machen. Dann kann ich die Abfrage entgegengesetzt ausführen und muss die Maus nicht zurück bewegen. Da sie immer im Kreis ist, verwerfe ich dann einfach die nach außen gehenden Bewegungen. Werde ich morgen erledigen.

  • autoBert

    Bei mir laufen beide Bsp. fehlerfrei.

    Win7 pro x64


    Ich habe auch probiert, ob die Position der Taskbar einen Einfluss hat - hat sie aber (jedenfalls bei mir) nicht. Die absoluten Positionen gehen vom sichtbaren Bildschirmbereich ohne Taskbar aus.


    Somit weiß ich gar nicht, wo ich jetzt nach Störquellen suchen sollte, da es ja bei mir läuft.

    :/

  • Somit weiß ich gar nicht, wo ich jetzt nach Störquellen suchen sollte, da es ja bei mir läuft.

    _MouseTrapCircle funktioniert auch bei mir problemlos (Win7, AutoIt 3.3.14.0). Ich muss nur versionsbedingt #include <WinAPISys.au3> statt #include <WinAPISysWin.au3> verwenden. Worauf ich allerdings kurz hereingefallen bin ist der Hotkey '^+0' für_Exit. Hier hatte ich auf die Schnelle O (den Buchstaben) und nicht 0 (Null) gelesen, aber das ist ja meine eigene Schuld;).

    Der Mauszeiger bewegt sich, nach subjektiver Wahrnehmung, bei Trap ON etwas 'ruckeliger'.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Ich benutze AutotoIt 3.3.14.5 zusammen mit:

    auf

    Beim Versuch das Ergebnis zu dokumentieren wird aber seltsanerweise der Mauszeiger im Kreis gecaptured:

    so das dies wohl eine weitere Eigenart meines Systems ist. Ein eingefügtes Consolewrite:

    Code
    ConsoleWrite($g__aCircle[0] & @TAB & $g__aCircle[1] & @CRLF)
    Code
    ergibt: 500 500


    mfg (auto)Bert

  • Bei mir laufen auch beide Bsp. fehlerfrei. Unschön ist nur noch, dass der Mauszeiger sich an den nicht ganz runden Stellen festhakt und bei einem flachen Bewegungswinkel der Maus nicht in die entsprechende Richtung rutscht, aber das ist wohl nur schwer zu berechnen.

    Win10 x64 Pro, AutoIt 3.3.14.5


    Wenn die Maus in Pfeilrichtung bewegt wird: Links im Bild hakt die Maus an dieser Stelle... rechts im Bild die Position, bis wo sie rutschen sollte.


    Ich benutze AutotoIt 3.3.14.5 zusammen mit:

    Hihi... 8o

  • Unschön ist nur noch, dass der Mauszeiger sich an den nicht ganz runden Stellen festhakt und bei einem flachen Bewegungswinkel der Maus nicht in die entsprechende Richtung rutscht, aber das ist wohl nur schwer zu berechnen.

    Ich prüfe ja, ob die Position in der errechneten Kreisfläche ist. Ich bin eigentlich recht zufrieden mit dem Ergebnis. Mein Ziel war ja nicht, dass der Benutzer am Kreisrand mit der Maus entlangfährt, sondern dass der nutzbare Bereich auf eine Kreisform beschränkt, also gewissermaßen fokussiert wird.

    Ich hatte erst überlegt, die Punkte des Umfangs zu berechnen und zu speichern. Aber sowohl das Berechnen als auch das Auswerten wären zeitlich indiskutabel lang. Die jetzige Berechnung braucht zwar nur ein paar Ticks, führt aber schon dazu, dass bei schneller Bewegung ein geringfügiges Ruckeln sichtbar ist.


    autoBert

    Hast du die Probleme auch, wenn du das Skript kompilierst?

    Im Moment scheint sich das Problem an der "Home"-Version festzumachen. Ich muss mal schauen, ob irgendjemand in der Familie ein Win 10 Home benutzt. Wozu gibts die überhaupt? Ich verwende immer nur Pro-Versionen, da gibt einem M$ wenigstens die Chance das System etwas zu beeinflussen.

  • Bilde ich mir das nur ein, oder hakt es mit _GDIPlus_GraphicsSetSmoothingMode weniger?

    AutoIt
    Func _Example_1()
        ...
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
    _GDIPlus_GraphicsSetSmoothingMode($hGraphic, $GDIP_SMOOTHINGMODE_HIGHQUALITY) ;Sets the graphics object rendering quality (antialiasing)
        ...


    Bei mir ruckelt es übrigens nicht!


    Ich hatte erst überlegt, die Punkte des Umfangs zu berechnen und zu speichern.

    Evtl. geht das mit ..., _GDIPlus_PathAddEllipse, _GDIPlus_PathIsVisiblePoint

  • Bilde ich mir das nur ein, oder hakt es mit _GDIPlus_GraphicsSetSmoothingMode weniger?

    Falls ja, dann bilden wir uns das beide ein. Auch das minimale Ruckeln erscheint mit nun etwas weniger 'ruckelig' ^^.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."