当前位置: 首页 > news >正文

网页控制鼠标 查看鼠标位置

仓库

njsgcs/mouse_control

按一下f5就可以知道鼠标位置

# mouse_api.py
from flask import Flask, jsonify, request
import pyautogui
import logging# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)# 创建Flask应用
app = Flask(__name__)# 禁用pyautogui的安全限制(在生产环境中请谨慎使用)
pyautogui.FAILSAFE = False@app.route('/click', methods=['POST'])
def click_mouse():"""鼠标点击接口可以接收JSON数据指定x,y坐标和点击类型"""try:data = request.get_json()# 获取点击坐标,默认为当前鼠标位置x = data.get('x')y = data.get('y')# 获取点击类型,默认为leftclick_type = data.get('type', 'left')# 获取点击次数,默认为1clicks = data.get('clicks', 1)# 获取间隔时间,默认为0.0interval = data.get('interval', 0.0)# 执行点击操作if x is not None and y is not None:pyautogui.click(x, y, clicks=clicks, interval=interval, button=click_type)logger.info(f"点击位置: ({x}, {y}), 类型: {click_type}, 次数: {clicks}")else:pyautogui.click(clicks=clicks, interval=interval, button=click_type)logger.info(f"点击当前位置, 类型: {click_type}, 次数: {clicks}")return jsonify({"status": "success","message": "鼠标点击成功","coordinates": {"x": x, "y": y} if x is not None and y is not None else "current position"})except Exception as e:logger.error(f"点击操作失败: {str(e)}")return jsonify({"status": "error","message": f"鼠标点击失败: {str(e)}"}), 500@app.route('/position', methods=['GET'])
def get_position():"""获取当前鼠标位置"""try:x, y = pyautogui.position()return jsonify({"status": "success","position": {"x": x, "y": y}})except Exception as e:return jsonify({"status": "error","message": f"获取鼠标位置失败: {str(e)}"}), 500@app.route('/move', methods=['POST'])
def move_mouse():"""移动鼠标到指定位置"""try:data = request.get_json()x = data.get('x')y = data.get('y')duration = data.get('duration', 0.0)  # 移动持续时间if x is None or y is None:return jsonify({"status": "error","message": "请提供x和y坐标"}), 400pyautogui.moveTo(x, y, duration=duration)logger.info(f"移动鼠标到: ({x}, {y})")return jsonify({"status": "success","message": "鼠标移动成功","position": {"x": x, "y": y}})except Exception as e:logger.error(f"移动鼠标失败: {str(e)}")return jsonify({"status": "error","message": f"鼠标移动失败: {str(e)}"}), 500@app.route('/health', methods=['GET'])
def health_check():"""健康检查接口"""return jsonify({"status": "healthy","message": "鼠标控制服务运行正常"})@app.route('/', methods=['GET'])
def index():"""根路径,返回API说明"""return jsonify({"message": "鼠标控制API服务","endpoints": {"POST /click": "执行鼠标点击操作","GET /position": "获取当前鼠标位置","POST /move": "移动鼠标到指定位置","GET /health": "健康检查"},"port": 5002})if __name__ == '__main__':print("启动鼠标控制API服务...")print("访问端口: 5002")print("请确保以管理员权限运行此程序")app.run(host='0.0.0.0', port=5002, debug=False)

http://www.dtcms.com/a/389874.html

相关文章:

  • PIT 定时器
  • 【题解】 [蓝桥杯 2019 省 B] 特别数的和
  • 数字隔离器,串口通信的安全之“芯”
  • 山脊图 (Ridgeline Plot):使用 joypy 库,优雅地比较多组数据的分布情况
  • Linux 进程同步以及僵尸进程等知识介绍
  • Python进程和线程
  • 斐波那契数列的递归和迭代实现
  • 时空预测论文分享:规则知识 因果预测框架 面向研究的评估体系 主动适应漂移
  • 《WINDOWS 环境下32位汇编语言程序设计》第18章 ODBC数据库编程
  • linux入门(3)
  • 任意版本GitLens vscode插件破解邪修秘法
  • Redis最佳实践——热点数据缓存详解
  • font简写和CSS的继承性
  • 高性能服务器配置经验指南6——BIT校园网在ubuntu中的自动检查连接状况脚本使用
  • SQL 连接详解:内连接、左连接与右连接
  • C2000基础-TIM介绍及使用
  • Day 06 动作类的初始化类------以B1为例
  • 面试题:对数据库如何进行优化?
  • samurai 点选分割 box分割
  • 计算机架构的总线协议中的等待状态是什么?
  • C++:入门基础(1)
  • ACD智能分配:服务延续和专属客服设置
  • 自监督学习分割
  • 抛弃自定义模态框:原生Dialog的实力
  • LangGraph 简单入门介绍
  • Docker 部署 DzzOffice:服务器 IP 转发功能是否需要开启
  • 无人机避障——卡内基梅隆大学(CMU)CERLAB 无人机自主框架复现
  • 正点原子zynq_FPGA-初识ZYNQ
  • Vue3中对比ref,reactive,shallowRef,shallowReactive
  • 通过Freemark渲染数据到Word里并生成压缩包