Files
ykxmz/docs/LICENSE.txt
T
xmz7891 4d97e40280 2.1.6:静默自动更新 + 远程鼠标控制 + 一键显示桌面
用户这次提了一整套升级。这个提交先落地三块(其余几块在做)。

== 一、静默自动更新 ==

用户原话:"手表端点击一个更新按钮,电脑端就可以自动进行静默更新,
其他什么设置都不变 …… 不弹任何窗口出来"。

链路:

    手表点按钮 -> 被控端问中转"最新是哪版"
               -> 下载到 %TEMP%\ykxmz-update\
               -> 校验 sha256
               -> 起一个**分离的 .cmd 帮手**
               -> 自己退出
               -> 帮手等它退出 -> 静默跑安装器 -> 重新拉起

关键设计说明:

  * **为什么要有那个 .cmd 帮手**:Windows 上正在运行的 exe 是锁着的,
    安装器覆盖不了,所以必须"先退出、再装、再起来",而这三步
    不能由被控端自己做(它一退出就没人执行后面的了)。
    用 DETACHED_PROCESS 起的助手不受父进程退出影响。

  * **配置为什么不会丢**:配置在 %ProgramData%\ykxmz\data\,
    **不在程序目录里**。安装器升级只替换 {app} 下的文件,
    不碰 ProgramData —— 中转地址、配对码、各种开关原样保留。
    这是这个功能能做的前提。

  * **更新源是用户自己的中转站**,不是作者的服务器,也不是任何
    写死的公网地址。被控端问的是它自己配置的那个地址。
    中转没有这个接口(老版本服务端)时会明确提示"先手动升级一次服务端"。

  * **sha256 必须校验**:自更新最大的风险是下到一半断了或被换了,
    装上去是个坏程序、而且它还会自己再更新 —— 螺旋下去很难救。
    对不上就**放弃这一轮**,保持现状(现状至少能用)。

中转新增:GET /v1/update/latest?platform=windows
返回 version / name / url / size / sha256。版本比较按**数字段**
(不能按字符串,否则 "1.9.0" > "2.1.4")。sha256 按
(文件名,大小,mtime) 缓存,避免每次重算 9MB。

手表端:"电脑端版本:点这里查看" 按钮,查完显示
"电脑端 2.1.4 → 2.1.5(点这里更新)",确认后才真的更新。

== 二、远程鼠标控制 ==

新增 windows/lanremote/input.py,用 SendInput 模拟鼠标键盘。

  * **为什么用 SendInput 而不是 mouse_event**:后者是 Win95 时代的
    API,会被 UIPI 拦,而且没有 dwExtraInfo(多个注入源会互相干扰)。
    SendInput 还能一次打包多个事件,按下+抬起之间不会插进别的输入。

  * **坐标是 0..65535 归一化**,而且**必须除以 (屏幕宽-1)**。
    少了那个 -1,最右边和最下边几像素点不到 —— 表现为
    "鼠标到不了屏幕边缘",任务栏在底下的机器上尤其明显。

  * **INPUT 结构在 32/64 位下大小不同**(28 / 40),
    ctypes 里按进程位数算,不能写死。

  * 权限说明:目标窗口如果是管理员权限的(UAC 提升过的),
    普通权限的注入会被 UIPI 拦掉。这不是 bug,是 Windows 的设计。
    被控端以管理员运行就都能点。

== 三、一键显示桌面 ==

用户要求快捷栏里那个"不能改"的按钮就是这个功能,等于 Win+D。
和鼠标控制共用 input.py。

== 顺手修的一个自己造的坑 ==

往 server.py 插方法时,**两次**把 dispatch 的兜底
`return {"ok": False, "error": f"未知命令: {cmd}"}` 一起卷进了新方法里:

  * pyflakes 报 "undefined name 'cmd'"
  * 而且 dispatch 丢了兜底分支(未知命令会返回 None)

第一次靠 pyflakes 抓到,第二次也是。为了以后不再犯,
`_tests/test_update_flow.py` 里加了**结构断言**:
兜底必须在带 CMD_UPDATE 的那个方法体里,而各新方法里不能出现它。

(那条断言第一版写得太死 —— 要求"紧跟 CMD_UPDATE 分支",
 后来往 dispatch 里插了新分支就误报了。改成验结构真相。)

== 验证 ==

    全量回归(含新增的 3a10 / 3a11 两关)全部 PASS
    静默自动更新:协议 + updater 15 项 + 服务端结构 8 项
    远程鼠标:坐标归一化 / 滚轮夹取 / Win+D 事件顺序 / 非法参数 22 项
    610 个 Python 文件语法通过
    实际注入鼠标成功(move / click / scroll / show_desktop)

== 还没做的(下一批) ==

    手表顶部快捷栏(可自定义最多 4 个,1 个固定"显示桌面")
    屏幕镜像去掉提示条、去掉所有弹窗
    托盘图标改成设置项
    「允许新设备连接」开关(中转后台 + 安卓端)
    弹文字窗口位置/大小可自定义
    中转后台设备列表显示版本 + 远程点更新

== 顺手清理 ==

_tests/out_app/ 下面那堆 .class 是 Java 编译检查的产物,
以前误提交进仓库了(152 个文件)。这次从索引里移除并加进 .gitignore。
2026-10-09 22:12:09 +08:00

168 lines
6.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
========================================================
ykxmz 使用条款与免责声明
========================================================
软件名称:ykxmz(远程管理工具)
版本:2.1.6
作者:小麦子
生效日期:2026 年 10 月 5 日
> **这份文件管的是「使用行为」,代码授权看仓库根目录的 `LICENSE`。**
>
> 根目录 `LICENSE` 是 GNU AGPL-3.0:你可以查看、修改、
> 再发布本软件的**代码**,衍生作品必须以同样协议开源。
>
> 这份文件说的是另一件事:**不管你从哪拿到它、改没改过,
> 都不许拿去做下面第三条那些事。**
>
> (早先这版文件写的是"软件许可协议",里面有一条"不得修改"——
> 那和 AGPL 冲突,所以 2.1.6 起拆开了:代码授权归 LICENSE,
> 使用约束归这份文件。)
--------------------------------------------------------
第一条 条款的范围
--------------------------------------------------------
本条款是你(以下称"使用者")与作者小麦子之间就 ykxmz 软件
(含被控端程序、中转服务器程序、手表端应用及相关文档,
以下统称"本软件")达成的**使用约定**。
下载、安装、复制或以任何方式使用本软件,即表示你已阅读、
理解并同意本条款全部内容。如不同意,请不要安装或使用。
--------------------------------------------------------
第二条 你可以做的
--------------------------------------------------------
本软件**免费**使用,作者不收取任何费用。你可以:
1. 在**你自己拥有或已获得明确授权**的设备上安装和使用本软件;
2. 在教室、机房、家庭等场景中,用于管理**你负责管理**的设备;
3. 复制并分发本软件 —— 分发时请保留作者署名,不要去掉版权声明;
4. 查看、修改其**源代码**并再发布,具体条件见根目录 `LICENSE`
(AGPL-3.0:衍生作品要同样开源,且不能拿去闭源商用)。
--------------------------------------------------------
第三条 【重要】使用红线
--------------------------------------------------------
本软件是一套远程控制工具,被控端可以被远程操作屏幕、文件、
音量、电源等。正因为能力较强,以下行为**严格禁止**:
1. **禁止**在未经设备所有者或管理者明确同意的情况下,
在他人的电脑、手机、平板上安装被控端;
2. **禁止**用于偷窥、跟踪、监视他人(包括配偶、家人、
同事、同学、下属)的隐私;
3. **禁止**用于窃取账号密码、聊天记录、照片、文件等
任何个人信息;
4. **禁止**将本软件伪装成系统组件、隐藏其存在、
故意使设备使用者无法发现或无法卸载;
5. **禁止**用于任何违反所在地法律法规的活动。
**一句话:只能管你自己的设备,或者别人明确同意你管的设备。**
违反上述任何一条,本条款立即终止,且由此产生的全部法律
责任由使用者自行承担,与作者无关。
--------------------------------------------------------
第四条 使用者应尽的通知义务
--------------------------------------------------------
如果你在被控端所在的设备上使用本软件,你有义务确保:
1. 该设备的使用者知道这台设备可以被远程管理;
2. 该设备的使用者知道如何查看、关闭或卸载本软件;
3. 被控端保持"连接时可见提示"功能开启(默认开启)。
--------------------------------------------------------
第五条 隐私说明
--------------------------------------------------------
本软件的设计原则是**数据不经过作者的服务器**:
1. 被控端与手表/控制端之间的所有数据(画面、文件、剪贴板、
语音等)通过你自己部署的中转服务器或局域网直连传输,
作者**不会**收到、存储或分析任何内容;
2. 中转服务器只转发加密连接中的字节流,不解析内容;
它记录的信息仅限于:设备名称、配对码、在线状态、
流量大小、连接时间——用于你在管理页上查看自己的设备;
3. 中转服务器部署在**你自己的设备**上,数据存在你自己的
硬盘里,作者无法访问;
4. 本软件不包含任何统计上报、行为采集、广告推送代码。
关于本软件需要使用的权限(网络访问、屏幕读取、文件读写等),
详见《安装前必读》。
--------------------------------------------------------
第六条 无担保声明
--------------------------------------------------------
本软件按"现状"提供,作者不对以下事项作出任何明示或默示的
担保,包括但不限于:
1. 软件无错误、不中断、能满足你的特定用途;
2. 与你的操作系统、杀毒软件、网络环境完全兼容;
3. 因网络运营商限制、Cloudflare 服务调整、系统更新等
外部原因导致的服务不可用。
**使用本软件的风险由你自行承担。**
--------------------------------------------------------
第七条 责任限制
--------------------------------------------------------
在适用法律允许的最大范围内,作者不对因使用或无法使用本软件
而产生的任何直接、间接、偶然、特殊或后果性损失负责,包括
但不限于数据丢失、业务中断、设备损坏、利润损失。
若适用法律不允许完全排除责任,作者承担的责任总额不超过
你为获得本软件所支付的费用(本软件免费,故为零)。
--------------------------------------------------------
第八条 条款终止
--------------------------------------------------------
出现下列情形之一,本条款自动终止:
1. 你违反本条款任何内容;
2. 你将本软件用于第三条约定的禁止用途。
条款终止后,你应当立即停止使用并卸载本软件。第二条中关于
分发的许可同时失效(代码授权是否终止以根目录 `LICENSE` 为准)。
--------------------------------------------------------
第九条 其他
--------------------------------------------------------
1. 本条款适用中华人民共和国法律;
2. 因本条款产生的争议,双方应友好协商解决;协商不成的,
提交作者所在地有管辖权的人民法院;
3. 作者保留在后续版本中调整本条款的权利,调整后的条款
随新版本一同发布;继续使用新版本即视为接受新条款;
4. 本条款部分内容无效,不影响其余内容的效力。
--------------------------------------------------------
作者:小麦子
软件:ykxmz 2.1.6
如果你不同意本条款的任何一条,请不要安装或使用本软件。
代码授权条款见仓库根目录 LICENSE(GNU AGPL-3.0)。
--------------------------------------------------------