Source code for windmouse.ahk_controller

from __future__ import annotations

from typing import Any

from .core import (
    DAMPED_DISTANCE_DEFAULT,
    GRAVITY_MAGNITUDE_DEFAULT,
    MAX_STEP_DEFAULT,
    WIND_MAGNITUDE_DEFAULT,
    AbstractMouseController,
    Coordinate,
    HoldMouseButton,
)

try:
    from ahk import AHK
except ImportError as e:
    raise OSError("You need install windmouse[ahk]") from e


[docs] class AHKMouseController(AbstractMouseController):
[docs] def __init__( self, ahk: AHK[Any], start_x: Coordinate | None = None, start_y: Coordinate | None = None, dest_x: Coordinate | None = None, dest_y: Coordinate | None = None, *, gravity_magnitude: float = GRAVITY_MAGNITUDE_DEFAULT, wind_magnitude: float = WIND_MAGNITUDE_DEFAULT, max_step: float = MAX_STEP_DEFAULT, damped_distance: float = DAMPED_DISTANCE_DEFAULT, ): self._ahk = ahk super().__init__( start_x, start_y, dest_x, dest_y, gravity_magnitude=gravity_magnitude, wind_magnitude=wind_magnitude, max_step=max_step, damped_distance=damped_distance, )
[docs] def tick(self, step_duration: float = 2) -> bool: coords = self._get_next_point() if coords is None: return False self._ahk.mouse_move( coords[0], coords[1], speed=step_duration, coord_mode="Screen" ) # type: ignore[call-overload] return True
def _get_current_mouse_x(self) -> Coordinate: return Coordinate(self._ahk.get_mouse_position(coord_mode="Screen")[0]) def _get_current_mouse_y(self) -> Coordinate: return Coordinate(self._ahk.get_mouse_position(coord_mode="Screen")[1]) def _hold_mouse_button(self, button: HoldMouseButton) -> None: self._ahk.click(button=button.value, direction="D") def _release_mouse_button(self, button: HoldMouseButton) -> None: self._ahk.click(button=button.value, direction="U")