async def mouse_drag(
        self,
        x: int,
        y: int,
        *,
        from_position: Optional[Tuple[int, int]] = None,
        speed: Optional[int] = None,
        button: Optional[Union[MouseButton, str]] = None,
        relative: Optional[bool] = None,
        blocking: bool = True,
        coord_mode: Optional[CoordModeRelativeTo] = None,
        send_mode: Optional[SendMode] = None,
    ) -> Union[None, AsyncFutureResult[None]]:
        """
        Analog for `MouseClickDrag <https://www.autohotkey.com/docs/commands/MouseClickDrag.htm>`_
        """
        if button is None:
            button = 'Left'
        else:
            button = _resolve_button(button)
        if from_position:
            x1, y1 = from_position
            args = [str(button), str(x1), str(y1), str(x), str(y)]
        else:
            args = [str(button), '', '', str(x), str(y)]

        if speed:
            args.append(str(speed))
        else:
            args.append('')

        if relative:
            args.append('R')
        else:
            args.append('')

        if coord_mode:
            args.append(coord_mode)
        else:
            args.append('')

        if send_mode:
            args.append(send_mode)
        else:
            args.append('')

        resp = await self._transport.function_call('AHKMouseClickDrag', args, blocking=blocking)
        return resp

        Analog for `MouseClickDrag <https://www.autohotkey.com/docs/commands/MouseClickDrag.htm>`_
        
ahk/_async/engine.py