Files
ykxmz/docs/LICENSE.txt
T
xmz7891 fd8be87209 2.1.8:修 Win7 语音播报 + 快捷栏按钮做大且4格全能换
用户这一轮报了两个问题,都修了。

== 一、Win7 上语音播报不能用 ==

用户原话:"我 win7 上的语音播报好像不能用,你再试一下别的版本能不能用"

**原来只有一条路**:

    powershell -NoProfile -WindowStyle Hidden -Command
        "Add-Type -AssemblyName System.Speech; $s = New-Object ...; $s.Speak('...')"

这在 Win7 上有三个坑,任何一个都能让它彻底不出声:

  1. **`powershell` 只按名字找**
     Win7 的 powershell.exe 在 `%SystemRoot%\System32\WindowsPowerShell\v1.0\`。
     精简版系统、或从服务/计划任务拉起时 PATH 里可能没有 ——
     CreateProcess 按名字找不到时是**静默失败**的。

  2. **Win7 默认 PowerShell 2.0,它按 ANSI 代码页解析 `-Command`**
     PS 3.0 起才按 UTF-16 处理。中文经 `-Command` 传进去容易乱码 ——
     表现是念出来是乱码,或者干脆不念。

  3. **`System.Speech` 需要 .NET Framework 3.0+**
     而系统自带的 **SAPI5** 从 Windows XP 就有,**根本不需要 .NET**。

**改成多方案降级**,按"依赖越少越优先"排:

    1. cscript + VBScript + SAPI5      <- Win98 起就有,不用装任何东西
    2. wscript + VBScript + SAPI5      <- 上一条被安全软件拦时的备选
    3. powershell + SAPI5 (COM)        <- 绕开 .NET
    4. powershell + System.Speech      <- 原来的做法,改用绝对路径
    5. powershell(PATH) + System.Speech <- 最原始的,兜底

一条通了**记住它**,以后直接用(不用每次从头试)。

**顺带修掉一个"骗人"的行为**:原来 `say()` 用 `Popen` 不等进程结束,
失败了也返回"已播报" —— 明明没出声却报成功。
现在等退出码,**全失败会明确报错并列出试过哪几条**。
代价是同步等待(念多久等多久),但"报成功其实没出声"比"慢一点"糟糕得多。

还加了 `_build/diag_tts.py`:在一台机器上把 5 条方案全试一遍并报告
哪条能用 —— 下次再有"某台机器上不行",跑一下就知道。

VBScript 的细节:**必须用 ANSI(mbcs) 写**,写成 UTF-8 的话
cscript 读出来中文是乱码(VBScript 的老规矩,很隐蔽)。
长文本还要分句 —— VBScript 单行有长度上限。

== 二、快捷栏按钮太小 + 4 格都要能换 ==

用户原话:"屏幕最上面这个按钮有些按不到,按钮太小了,做大一点,
           然后呢,这个每每个四格算换一下吧,第一个第二个第三个
           第四个都能换东西"

  * **按钮做大**:30dp -> 46dp(接近 Android 建议的最小可点区域 48),
    字号 11 -> 14。30dp 在表盘上手指按上去一半在栏外。
    **栏高做成常量 QUICK_BAR_DP,栏高 / 面板 topMargin / addView
    三处用同一个值** —— 分三处写的话改一个忘一个,
    表现是"内容被盖住"或"上面空一条"。

  * **4 格全部可自定义**。用户最早说"其中有一个按钮不能改,
    功能就是一键返回桌面",第一版就按"第 4 格写死 desktop"做的。
    现在他改主意了 —— 所以 desktop 变成**普通可选动作**,
    默认仍放第 4 格(习惯不用改),但想换也能换。
    可选动作从 7 个变成 8 个。

  **教训(写进测试注释了)**:别把"用户当时的一句话"当成永久约束
  焊进结构里;真是约束的话,注释里要写清是什么时候的要求,
  下次他改主意时才知道该动哪儿。

== 三、修一个"测试自己没擦干净"造成的假 bug ==

全量回归报:

    [FAIL] 配对码正确写入  实际 '(旧的残留值)'

而 `(旧的残留值)` 是**上一次测试遗留**的配对码 —— 数据目录
`C:\ProgramData\ykxmz\data` 在卸载时**故意不删**(那里存着用户的
中转地址、配对码等,卸载不该删),所以机器上会留着上一轮的
settings.json。测试装的时候虽然传了 `/CODE=517284`,但环境没擦干净时
就可能读到旧值 —— 表现成"安装包有 bug"。

**修法**:`test_installer_cycle.py` 加一步"装前先清残留"
(正规卸载 -> 杀进程 -> 删安装目录 -> **删数据目录**)。
数据目录那一步是关键 —— 卸载器不删它。

== 四、其他 ==

  * `docs/项目规矩.md` 第一节改成**按预案执行**:
    预案一 = 做完测试没问题就上传;预案二 = 做完测试但不上传,直接给用户。
    用户没说预案几时默认按预案一,并在交付时说明。
  * 顺手把那份文档里的老域名 `relay.xxmxxs.top` 改成现在的
    `yk.xxmxxs.top`(老服务器早就退役了)。
  * 修掉自己造的重复定义:往 actions.py 插降级链时,
    `list_voices` / `say` 各插了两份(pyflakes 报 redefinition)。
  * 一次危险的误操作:`Path.write_text(..., newline='\n')` 会**先截断文件
    再校验参数**,参数非法时文件已经空了 —— 我用它把
    `_tests/test_quickbar.py` 清空了。已重写。
    **以后不给 write_text 传 newline。**

== 验证 ==

    全量回归(21 关)全部 PASS
    新增关卡:3a13 手表快捷栏 / 3a14 语音播报降级
    安装包周期 23 项全过(装 -> 验 -> 卸 -> 再验)
    Java 编译通过(android-34, --release 8)
    本机实测语音播报:cscript 那条通了(2.4 秒)
    全部产物重建,Win7 兼容校验通过
2026-10-09 23:30:05 +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.8
作者:小麦子
生效日期:2026 年 10 月 5 日
> **这份文件管的是「使用行为」,代码授权看仓库根目录的 `LICENSE`。**
>
> 根目录 `LICENSE` 是 GNU AGPL-3.0:你可以查看、修改、
> 再发布本软件的**代码**,衍生作品必须以同样协议开源。
>
> 这份文件说的是另一件事:**不管你从哪拿到它、改没改过,
> 都不许拿去做下面第三条那些事。**
>
> (早先这版文件写的是"软件许可协议",里面有一条"不得修改"——
> 那和 AGPL 冲突,所以 2.1.8 起拆开了:代码授权归 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.8
如果你不同意本条款的任何一条,请不要安装或使用本软件。
代码授权条款见仓库根目录 LICENSE(GNU AGPL-3.0)。
--------------------------------------------------------