用 Windows 键盘和鼠标控制支架上的 Android 手机,支持刷视频、悬浮鼠标和点击。当前版本 1.0.8(局域网试用版),由 Windows EXE 和 Android APK 组成,不依赖云端服务,日常使用无需 Root、USB 或无线调试。
- 全局快捷键上下滑动,窗口最小化后仍有效。
- Ctrl + 鼠标滚轮切换视频。
- 按住 Alt 移动手机悬浮箭头,左键点击;松开恢复电脑点击。
- 六位码配对、保存凭据、状态检查和原地址自动重连。
- 手机通知栏停止接收,电脑暂停控制或取消配对。
暂不支持直接键盘打字、鼠标拖拽、自动发现新 IP、跨互联网连接、自动点赞/关注/评论、自动更新。开发用无障碍填字接口不是完整输入功能;当前测试设备的视频号评论框填字验证未通过。不包含远程输入法。
| 设备 | 要求 |
|---|---|
| 电脑 | Windows,主要在 Windows 11 验证;使用 .NET Framework 4.x |
| 手机 | Android 8.0 / API 26 及以上,主要在 Xiaomi 15 / HyperOS 3 验证 |
| 网络 | 两端局域网互通,电脑可以接网线 |
| 手机权限 | 手动开启轻划无障碍服务,允许后台接收 |
未声明全机型或全部视频 App 兼容。
仓库不存放二进制文件。构建后产物位于 dist/:
SJM.exe:电脑直接运行。SJM-1.0.8.apk:传到手机安装。
已发布 v1.0.8 发行包:Windows EXE · Android APK · SHA-256 校验文件。也可按下方说明从源码构建。运行成品不需要 Java、Python、Gradle 或 Android 开发工具。
- 手机安装并打开轻划。
- 点击“设置无障碍权限”,按系统提示手动开启“轻划 · 上下滑动”。当前权限包含手势和窗口控件访问,后者用于输入框兼容性测试。
- 返回轻划,点击“生成配对码并开启接收”,建议允许通知,便于随时停止。
- 电脑运行 EXE,填写手机轻划首页显示的 IPv4 地址和 6 位配对码,点击连接。
- 手机切回视频 App 并保持解锁。
配对码有效期两分钟,成功使用后失效;连续输错五次需生成新码。可以先配对后开无障碍,但未开启时不能执行手势。
地址示例:192.168.1.20。不要填写无线调试端口,也不要在地址后附加端口。
| 操作 | 手机行为 |
|---|---|
| Ctrl + ↓ | 上滑,通常为下一条视频 |
| Ctrl + ↑ | 下滑,通常为上一条视频 |
| Ctrl + 空格 | 上滑 |
| Ctrl + 滚轮向下 | 上滑 |
| Ctrl + 滚轮向上 | 下滑 |
| 按住 Alt + 移动鼠标 | 显示并移动手机箭头 |
| 按住 Alt + 左键 | 在箭头尖端位置点击手机 |
| 松开 Alt | 停止鼠标会话,隐藏箭头,恢复电脑点击 |
| 窗口“暂停控制” | 停止手机控制并释放快捷键 |
电脑光标仍会移动。手机指针按当前显示器的位置映射,围绕显示器中心放大到初版的 1.5 倍;超出范围时停在手机屏幕边缘。当前只支持左键轻触,不支持拖拽。
Ctrl + 空格可能与输入法冲突;Ctrl + 滚轮会占用浏览器缩放,滚轮功能可以单独取消勾选。热键注册失败会提示具体冲突组合。
窗口最小化后仍有效;关闭窗口会退出。无托盘模式,也没有 F8/F9/F10 或鼠标侧键绑定。
手机 IP 没有写死,通信端口固定为 TCP 39871。 电脑保存用户填写的地址,启动时自动连接。
- 每 5 秒尝试检查连接;单次普通请求超时上限 6 秒,检查不重叠执行。
- 网络恢复且 IP 不变时自动恢复;用户主动暂停的状态保留。
- 失败的滑动和点击不会自动补发,避免恢复后误操作。
- 手机超过 15 秒没有认证通信会显示暂未通信。“已配对”不等于网络在线。
- IP 改变时,当前需电脑取消配对,再填新地址和新配对码;尚无自动发现。
- 电脑“取消配对”只清除本机记录。手机“撤销已配对的电脑”更换密钥,使旧电脑凭据失效。
访客 Wi-Fi、AP 隔离、防火墙或不同网段的访问限制都可能阻断连接。无线调试仅供开发安装与诊断,关闭它不影响日常使用。
| 现象 | 检查方法 |
|---|---|
| 连接被拒绝 | 手机是否已开启接收 |
| 前台正常,切回视频后超时 | 检查应用后台限制;测试小米设备设为“省电策略 → 无限制”后恢复 |
| 已配对但不能滑动 | 检查轻划自己的无障碍服务,而非系统“无障碍菜单” |
| 换 Wi-Fi 后失效 | 核对局域网互通和手机 IP |
| 手机重启或应用强行停止 | 重新打开轻划并开启接收 |
| 无障碍授权被限制 | 阅读系统提示,按系统提供的流程自行确认;程序不绕过授权 |
| Windows 意外退出 | 查看 %LOCALAPPDATA%\SJM\diagnostics.log,分享前检查并脱敏 |
常驻通知不保证服务永远不受系统限制。手机锁屏或熄屏时拒绝滑动和点击。
- 不截图、不录音,无广告、分析 SDK 或云端账号。
- 无障碍具有读取窗口控件权限。当前填字测试只访问焦点输入框,不回传页面文字,并拒绝已标记为密码的输入框。
- 普通控制只传指令、坐标和状态;填字测试通过加密连接传递显式指定的短文本,不会自动发送评论。
- 手机凭据保存在私有 SharedPreferences,禁止备份/迁移;TLS 私钥位于 Android Keystore。
- Windows 用当前用户 DPAPI 加密保存
%LOCALAPPDATA%\SJM\pairing.dat,异常日志位于同一目录。当前没有存储目录设置。 - 使用 TLS 1.2、配对后证书指纹固定、随机挑战及 HMAC-SHA256。首次配对采用首次信任方式,只应在可信局域网配对,不能抵御首次配对时的主动冒充。
- 所有持有效配对凭据的电脑都有控制权;手机停止接收会断开连接并隐藏指针。
| 路径 | 内容 |
|---|---|
android/ |
原生 Java Android 接收端 |
SwipeService.java |
无障碍滑动及控制入口(位于 Android 源目录) |
PointerControl.java |
悬浮箭头、按帧合并移动、点击、填字测试 |
ReceiverService.java |
TLS 接收与会话管理 |
Protocol.java / TlsIdentity.java |
有界解析、HMAC 与 Keystore 身份 |
desktop/Program.cs |
WinForms 界面、热键、鼠标钩子、状态检查 |
desktop/RemoteClient.cs |
普通请求与证书校验 |
desktop/PointerSession.cs |
持续鼠标连接 |
scripts/ / tests/ |
构建脚本与回归测试 |
普通指令包括 STATUS、UP、DOWN、FOCUS、TEXT:。MOUSE2 认证后进入持续 TLS 会话:移动不逐条等待回复,手机通过 Choreographer 合并到最新位置;点击和周期检查仍确认。保留旧 MOUSE 协议。解析长度、坐标范围、并行连接数和鼠标会话数均有限制。
滑动轨迹为纵向 76% → 28%、持续 260ms,下滑反向,间隔至少 450ms。指针断流有约 800ms 隐藏计时,实际执行受系统调度影响。
需要 Windows、PowerShell、JDK 17、Android SDK Platform 36、Gradle 8.14、Android Gradle Plugin 8.11.1,以及 .NET Framework C# 编译器。
当前脚本依赖开发机安装布局,不是开箱即用的通用构建脚本;未附带 Gradle Wrapper。 请先调整:
scripts/build.ps1:JDK、SDK、Gradle 路径。scripts/test.ps1:JDK 路径。- SDK 也可用不提交的
local.properties配置sdk.dir。
依赖下载需能访问 Google Maven / Maven Central。在仓库根目录运行,构建前关闭运行中的 EXE:
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/test.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/build.ps1构建会执行 Android release、lint、Windows 编译,并输出 SHA-256。测试使用回环端口 39871,运行前确保该端口空闲。
首次构建在 .local/ 生成 release 签名和 DPAPI 加密密码。保留签名、不要提交或分享;不同签名不能直接覆盖安装原 APK,卸载会清除配对。DPAPI 与 Windows 用户绑定,迁移构建机需另外妥善迁移签名凭据。
.local/、dist/、缓存、签名、日志和现场调试材料均不提交。测试代码中的固定字符串是测试夹具,不要替换为真实凭据。
- Java 协议认证、指令白名单、长度边界、配对码有效期和失败次数限制。
- Java/C# HMAC 一致性、真实本地 TLS 握手与证书指纹拒绝。
- 持续鼠标会话、无 MOVE 回复时连续推进坐标、点击顺序、认证前点击丢弃及关闭连接。
- 使用隔离配对文件的 Windows 界面状态、窗口释放检查。
- Android release 和 lint;Xiaomi 15 滑动、指针显示和点击评论框实测。
- 当前视频号无障碍直接填字测试未通过。
- 1.0.8 一次 4 秒轨迹测试:收到 234 个位置,处理 127 次帧更新,约 32 次/秒。这是应用处理次数,不是最终屏幕呈现帧率,不保证所有网络达到相同速度。
Windows 曾发生一次无系统崩溃记录的退出;已补充诊断和回调释放保护,但未复现原始原因,不宣称所有退出问题均已解决。
| 版本 | 变化 |
|---|---|
| 1.0.8 | 连续发送移动、手机按帧合并,改善等待回复造成的卡顿 |
| 1.0.7 | 白色黑边箭头,1.5 倍移动速度 |
| 1.0.6 | Alt 鼠标控制与填字兼容性测试 |
| Windows 1.0.5 | 异常日志、回调及窗口释放保护 |
| 1.0.4 | 定时状态检查、原地址自动重连 |
| 1.0.3 | 方向键和滚轮方向调整 |
| 1.0.2 | Ctrl 快捷键、滚轮与配对界面 |
欢迎通过 Issues 提供设备型号、系统版本、轻划版本、复现步骤和脱敏错误信息。不要上传配对文件、私钥、签名或包含私人内容的截图。
本仓库尚未附加开源许可证。公开可见不等于授予任意使用、修改和再分发许可。