ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

FastAPI+PyAutoGUI实现手机远程控制电脑

FastAPI+PyAutoGUI实现手机远程控制电脑 1. 项目背景与核心价值躺在床上用手机控制电脑这个需求相信很多数码爱好者都深有体会。想象一下冬天的夜晚你已经窝在被窝里准备入睡突然发现电脑还在播放音乐或者下载任务还没结束需要关机。这时候如果有个手机就能控制的本地服务简直不要太方便。这个项目就是用Python的FastAPI框架搭建一个本地HTTP服务通过手机浏览器访问特定页面实现对电脑的基础控制。核心功能包括关机/重启/睡眠等电源管理媒体播放控制播放/暂停/切歌等简单的鼠标键盘模拟操作相比市面上各种远程控制软件这个方案有几个独特优势完全本地运行无需注册账号没有隐私泄露风险轻量级实现服务端代码不到200行跨平台支持只要电脑和手机在同一局域网即可可高度自定义想加什么功能就加什么2. 技术栈选型解析2.1 为什么选择FastAPIFastAPI是构建这个项目的绝佳选择主要因为开发效率高声明式接口定义自动生成文档性能出色基于Starlette和Pydantic速度媲美NodeJS和Go类型安全Python类型提示的全面支持异步支持轻松处理并发请求对比Flask和DjangoFlask虽然轻量但缺少异步支持Django过于重量级不适合这种小型服务FastAPI的自动交互文档对调试特别友好2.2 PyAutoGUI的妙用PyAutoGUI是实现电脑控制的核心库它提供跨平台的GUI自动化控制鼠标移动/点击/拖拽键盘输入模拟屏幕截图和图像识别特别适合我们的场景import pyautogui # 模拟媒体键 pyautogui.press(playpause) # 播放/暂停 pyautogui.press(nexttrack) # 下一首 pyautogui.press(volumedown) # 音量减小 # 鼠标控制 pyautogui.moveTo(100, 100) # 移动鼠标 pyautogui.click() # 点击注意使用PyAutoGUI时建议设置安全措施pyautogui.FAILSAFE True # 启用故障安全保护这样当鼠标移动到屏幕左上角时会自动终止程序防止失控。3. 服务端完整实现3.1 基础环境准备首先确保安装所需库pip install fastapi uvicorn pyautogui项目目录结构建议/remote-control ├── main.py # 主程序 ├── static/ # 静态文件 │ ├── index.html │ └── style.css └── requirements.txt3.2 核心API实现main.py的基础框架from fastapi import FastAPI, Request from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates import pyautogui import os import uvicorn app FastAPI() # 挂载静态文件 app.mount(/static, StaticFiles(directorystatic), namestatic) app.get(/shutdown) async def shutdown(): os.system(shutdown /s /t 1) # Windows # os.system(shutdown now) # Linux/Mac return {status: shutting down} app.get(/playpause) async def playpause(): pyautogui.press(playpause) return {status: ok} # 其他控制接口... if __name__ __main__: uvicorn.run(app, host0.0.0.0, port8000)3.3 前端控制页面static/index.html简单实现!DOCTYPE html html head title电脑遥控器/title style .btn { padding: 15px 25px; margin: 10px; font-size: 18px; } /style /head body h1电脑遥控器/h1 button classbtn onclickcontrol(shutdown)关机/button button classbtn onclickcontrol(restart)重启/button button classbtn onclickcontrol(playpause)播放/暂停/button button classbtn onclickcontrol(nexttrack)下一首/button script function control(cmd) { fetch(/${cmd}) .then(res console.log(res)) .catch(err console.error(err)); } /script /body /html4. 高级功能扩展4.1 安全增强措施裸奔的HTTP服务存在风险建议添加基础认证from fastapi import Depends, HTTPException from fastapi.security import HTTPBasic, HTTPBasicCredentials security HTTPBasic() app.get(/secure-action) async def secure_action(credentials: HTTPBasicCredentials Depends(security)): correct_username admin correct_password secret if not (credentials.username correct_username and credentials.password correct_password): raise HTTPException(status_code401) # 执行安全操作...CORS限制from fastapi.middleware.cors import CORSMiddleware app.add_middleware( CORSMiddleware, allow_origins[http://localhost:8080], # 只允许特定前端 allow_credentialsTrue, allow_methods[*], allow_headers[*], )4.2 更多实用功能可以继续扩展的功能文件传输手机和电脑互传小文件剪贴板同步手机复制电脑粘贴屏幕截图查看电脑当前画面命令行执行运行简单命令例如实现截图功能from fastapi.responses import FileResponse app.get(/screenshot) async def screenshot(): pyautogui.screenshot(screenshot.png) return FileResponse(screenshot.png)5. 部署与使用技巧5.1 启动与访问启动服务python main.py手机访问确保手机和电脑在同一局域网在电脑上查看本机IPipconfig/ifconfig手机浏览器访问http://电脑IP:80005.2 开机自启动Windows创建计划任务WinR输入taskschd.msc创建基本任务触发器选择当用户登录时操作选择启动程序指向Python脚本Linux使用systemd服务# /etc/systemd/system/remote-control.service [Unit] DescriptionRemote Control Service [Service] ExecStart/usr/bin/python3 /path/to/main.py Restartalways Useryourusername [Install] WantedBymulti-user.target5.3 常见问题解决问题1PyAutoGUI在无显示器环境下报错解决方案安装虚拟显示驱动# Linux sudo apt install xvfb Xvfb :1 -screen 0 1024x768x24 export DISPLAY:1问题2手机无法访问服务检查电脑防火墙设置确认IP地址正确尝试ping测试连通性问题3媒体键不生效确保音乐播放器是活动窗口尝试先模拟点击播放器窗口pyautogui.click(100, 100) # 播放器窗口坐标 pyautogui.press(playpause)6. 项目优化方向这个基础版本还可以进一步优化响应式前端使用Vue/React构建更美观的控制面板WebSocket支持实现实时状态同步语音控制集成语音识别功能插件系统支持动态加载功能模块移动端APP打包成原生应用更方便使用一个进阶的FastAPI配置示例from contextlib import asynccontextmanager from fastapi import FastAPI asynccontextmanager async def lifespan(app: FastAPI): # 启动时初始化 print(Service starting...) yield # 关闭时清理 print(Service shutting down...) app FastAPI(lifespanlifespan)这个项目虽然简单但涵盖了Python web开发的多个实用技术点。我在实际使用中发现最适合的场景就是睡前控制电脑和简单的媒体控制。对于更复杂的需求可以考虑集成Home Assistant等智能家居系统。
返回列表