# word_v3 **Repository Path**: au3_script/word_v3 ## Basic Information - **Project Name**: word_v3 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-24 - **Last Updated**: 2026-10-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 桌面悬浮单词弹幕 v3 (Word Danmu v3) 桌面悬浮显示单词弹幕,利用碎片时间潜移默化背单词。AutoIt v3 实现。 v3 增强版在弹幕模式基础上新增 **学习统计 / 番茄钟 / 深色浅色主题 / 悬停朗读** 四项功能。 ![窗口预览](app.ico) --- ## 项目概述 | 项目 | 说明 | |------|------| | **名称** | 桌面悬浮单词弹幕 v3 (Word Danmu v3) | | **语言** | AutoIt v3 | | **功能** | 桌面悬浮弹幕背单词 + 学习统计 / 番茄钟 / 主题 / TTS 朗读 | | **版本** | v3.0 增强版 | | **入口** | `danmu.au3` | --- ## 功能特性 - **桌面悬浮**:分层窗口 + Alpha 透明 + 圆角背景,不遮挡桌面 - **鼠标穿透**:点击/拖拽直接穿透到下方窗口,不影响正常操作 - **自动滚动**:多个单词像弹幕一样从右向左飘过,随机颜色与位置 - **悬停暂停**:鼠标移到窗口上时暂停滚动,移开继续 - **托盘菜单**:右键托盘图标控制暂停、速度、透明度、字体、词库 - **UTF-8 配置**:`config.ini` 全程 UTF-8 编码,中文路径不乱码 - **配置校验**:自动检查配置合法性,非法值自动修正并提示 - **位置持久化**:关闭/重启后恢复到上次位置与进度 ### v3 增强功能 - **学习统计**:托盘菜单打开统计面板,查看本次会话时长、显示单词数(总次数/不同词数)、词库总数、已掌握数 - **番茄钟**:学习 25 分钟休息 5 分钟提醒,工作/休息时长可配置(15/20/25/30/45 分 + 3/5/10 分),托盘气泡提示切换 - **深色/浅色主题**:深色=鲜艳字+黑底白字,浅色=深色字+白底深字,切换即时生效(含 hover 背景匹配) - **悬停朗读**:开启后鼠标悬停弹幕自动调用系统 TTS 朗读单词 - **已掌握标记**:悬停单词后按 `Ctrl+Alt+M` 标记掌握,持久化到 `mastered.txt`,之后不再显示 - **当前单词操作**:朗读 / 跳过 / 标记已掌握,托盘菜单「当前单词」子菜单或全局快捷键触发 - **显示/隐藏弹幕**:托盘一键临时隐藏全部弹幕(投屏/演示场景),再点恢复 - **全局快捷键**:暂停/朗读/跳过/标记无需打开菜单,随时可用 --- ## 文件说明 ``` word/ ├── danmu.au3 # 主程序入口 (弹幕 v3 增强版) ├── danmu.exe # 已编译可执行文件 ├── lib/ # 模块库 │ ├── config.au3 # 配置管理 (含 v3 配置项校验) │ ├── screen.au3 # 屏幕工作区获取 │ ├── word.au3 # 词库加载与单词获取 │ ├── danmu.au3 # 弹幕核心 (支持主题配色) │ ├── tray.au3 # 托盘菜单 (含 v3 功能菜单) │ └── extra.au3 # v3 扩展功能 (统计/番茄钟/主题/TTS) ├── app.ico # 托盘图标 ├── config.ini # 用户配置(UTF-8,首次运行自动创建) ├── mastered.txt # 已掌握单词表(自动生成,每行一个单词) ├── run.bat # 一键启动脚本 ├── build.bat # 一键编译脚本 ├── readme.md # 本文档 ├── word/ # 词库目录 │ ├── 四级-乱序.txt │ ├── 六级-乱序.txt │ ├── 考研-乱序.txt │ ├── 高中-乱序.txt │ ├── 初中-乱序.txt │ ├── 托福-乱序.txt │ └── SAT-乱序.txt └── dist/ # 编译发布目录 ├── danmu.exe # 已编译可执行文件 ├── config.ini └── word/ # 打包时附带的词库 ``` --- ## 小白部署教程 ### 一、运行源码版(推荐先体验) #### 1. 安装 AutoIt v3 到官网下载并安装 AutoIt v3:https://www.autoitscript.com/site/autoit/downloads/ 安装时勾选 **「Add AutoIt to PATH」**(加入系统环境变量),方便命令行调用。 #### 2. 运行程序 **方式 A:双击 `run.bat`** - 双击项目根目录的 `run.bat`,脚本会自动查找 AutoIt3.exe 并启动。 - 若未安装 AutoIt 但存在 `danmu.exe`,会自动改用编译版。 **方式 B:右键运行 `.au3`** - 右键 `danmu.au3` → `Run Script` **方式 C:命令行** ```powershell AutoIt3.exe danmu.au3 ``` ### 二、使用编译版(无需安装 AutoIt) 直接双击 `dist\danmu.exe` 即可运行。将 `word/` 词库目录和 `config.ini` 放在 EXE 同目录下即可。 ### 三、自己编译 EXE ```powershell Aut2Exe.exe /in danmu.au3 /out danmu.exe /icon app.ico ``` 或直接运行 `build.bat` 一键编译。编译后的 `danmu.exe` 可独立运行,无需安装 AutoIt。 --- ## 基础使用说明 ### 启动后能看到什么 多个单词像视频弹幕一样从右向左飘过,随机颜色。 ### 托盘菜单操作 右键点击右下角托盘图标弹出菜单(**双击托盘图标 = 暂停/恢复**): | 菜单项 | 功能 | |--------|------| | 暂停滚动/恢复滚动 | 暂停或恢复滚动动画(文字随状态切换) | | 显示/隐藏弹幕 | 一键临时隐藏全部弹幕,再点恢复 | | 速度 | 选择滚动速度(多档) | | 透明度 | 选择背景不透明度(多档) | | 字体大小 | 选择字体大小 | | 显示区域 | 弹幕 Y 范围占屏幕高度比例 | | 单词本 | 切换不同词库文件 | | 重置单词 | 从词库开头重新开始 | | 当前单词 | 朗读/跳过/标记已掌握(操作最近悬停的单词) | | 字体描边/阴影 | 开关描边/阴影效果 | | 学习统计 | 弹出面板:会话时长 / 显示单词数 / 词库总数 / 已掌握数 | | 主题 | 切换深色 / 浅色配色(含 hover 背景匹配) | | 番茄钟 | 开关 + 工作时长(15~45分) + 休息时长(3~10分),到时气泡提醒 | | 悬停自动朗读 | 开关后鼠标悬停弹幕自动 TTS 朗读单词 | | 关于 | 查看版本信息 | | 退出 | 关闭程序 | ### 全局快捷键 对最近一次鼠标悬停的弹幕单词生效,系统级热键无需打开菜单: | 快捷键 | 功能 | |--------|------| | `Ctrl+Alt+P` | 暂停 / 恢复滚动 | | `Ctrl+Alt+S` | 朗读当前单词 | | `Ctrl+Alt+N` | 跳过当前单词(之后还会出现) | | `Ctrl+Alt+M` | 标记已掌握(不再显示,持久化) | > 使用步骤:先把鼠标悬停到弹幕上(弹幕会暂停放大),再按快捷键或移到托盘点菜单。 --- ## 配置说明 (config.ini) ```ini [SETTING] speed=1.0 wordFile=word\四级-乱序.txt wordIndex=0 opacity=107 fontSize=20 fontOutline=false fontShadow=true danmuCount=10 spawnInterval=400 screenRatio=0.6 theme=dark autoSpeak=false pomodoroEnabled=false pomodoroWork=25 pomodoroBreak=5 ``` | 参数 | 说明 | 取值范围 | |------|------|----------| | speed | 滚动速度倍率 | 0.1 ~ 5.0 | | opacity | 背景透明度 | 0 ~ 255 | | fontSize | 字体大小 | 8 ~ 72 | | danmuCount | 弹幕槽位数量 | 1 ~ 30 | | spawnInterval | 弹幕生成间隔(ms) | 50 ~ 5000 | | screenRatio | 显示区域占屏高比例 | 0.1 ~ 1.0 | | theme | 主题 | dark / light | | autoSpeak | 悬停自动朗读 | true / false | | pomodoroEnabled | 番茄钟开关 | true / false | | pomodoroWork | 番茄钟工作时长 | 5 ~ 120 分钟 | | pomodoroBreak | 番茄钟休息时长 | 1 ~ 60 分钟 | > 程序启动时会自动校验配置,非法值会自动修正为默认值并弹窗提示,不会导致崩溃。 --- ## 词库格式 每行一个单词,**Tab 分隔**英文和中文释义: ``` access v. 获取 n. 接近,入口 project n. 工程;课题、作业 intention n. 打算,意图 ``` 词库文件放在 `word/` 目录下,UTF-8 编码。托盘菜单会自动列出所有 `.txt` 文件。 **自制词库步骤**: 1. 在 `word/` 目录新建一个 `.txt` 文件,如 `我的词库.txt` 2. 每行输入 `单词释义`(按一次 Tab 键) 3. 保存为 UTF-8 编码(记事本另存为时选择 UTF-8) 4. 右键托盘 →「单词本」即可看到并切换 --- ## 常见问题排查 ### Q1:启动后看不到单词窗口? - 检查右下角托盘是否有图标,右键 →「显示/隐藏」切换。 - 弹幕窗口置顶,可能被其他置顶窗口遮挡。 - 检查 `word/` 目录下是否有词库文件。 ### Q2:提示「词库未找到」? - 确认 `config.ini` 中 `wordFile` 指向的文件存在。 - 路径是相对于脚本/EXE 所在目录,如 `word\四级-乱序.txt`。 - 在托盘菜单「单词本」中重新选择一个词库。 ### Q3:词库加载失败或显示乱码? - 词库文件必须是 **UTF-8 编码**。用记事本打开 → 另存为 → 编码选 UTF-8。 - 每行必须用 **Tab** 分隔单词和释义,不能用空格。 ### Q4:CPU 占用高? - 调小 `danmuCount`(弹幕数量)。 - 调大 `spawnInterval`(生成间隔)。 - 已优化为仅在悬停状态变化时重绘,正常滚动只移动窗口。 ### Q5:`error.log` 不断变大? - 已修复:原版本文字测量函数误把结构体指针当数值,导致测量恒失败并疯狂写日志。 - 升级后可安全删除旧的 `error.log`。 ### Q6:配置改了不生效? - 多数参数可通过托盘菜单实时调整并自动保存。 - 若配置非法,程序会自动修正并提示,以修正后的值为准。 ### Q7:悬停朗读没有声音? - 程序会按单词语言**自动选择系统已安装的语音包**(英文/中文/阿拉伯语/日语/韩语等)。 - 英文语音 Windows 自带;中文语音包多数系统已预装;**阿拉伯语等其他语言需在系统里额外安装语音**: 设置 → 时间和语言 → 语言和区域 → 添加语言(如阿拉伯语)→ 勾选「语音」→ 安装后重启本程序。 - 缺少对应语音包时程序会回退默认语音(可能无声),并弹一次气泡提示。 - 确认托盘菜单「悬停自动朗读」已勾选开启。 ### Q8:番茄钟不提醒? - 确认托盘「番茄钟 → 开启/关闭」已勾选。 - 番茄钟使用托盘气泡(TrayTip)提醒,请确保系统通知未被全局禁用。 - 工作时长到会提示休息,休息时长到会提示继续,循环进行。 ### Q9:快捷键按下没反应或冲突? - 快捷键作用于**最近悬停的单词**:先把鼠标移到弹幕上悬停一下再按键。 - 若 `Ctrl+Alt+S/N/M/P` 与其他软件冲突,改用托盘菜单「当前单词」子菜单操作即可,功能完全相同。 ### Q10:不想看到弹幕但不想退出程序? - 右键托盘 →「显示/隐藏弹幕」即可一键隐藏(投屏/演示场景实用),再点一次恢复。 - 暂停只是停止滚动,隐藏则完全不显示。 --- ## 技术要点 ### GDI+ 渲染 - 分层窗口 (`WS_EX_LAYERED`) + `UpdateLayeredWindow` 实现 Alpha 合成 - 圆角背景通过 GDI+ Path 逐段构建(4 边 + 4 弧 + CloseFigure) - 使用灰度抗锯齿 (`AntiAliasGridFit`) 而非 ClearType(分层窗口不支持子像素渲染) - 高质量设置:`HighQuality` 平滑 + `HighQualityBicubic` 插值 + `HighQuality` 像素偏移 ### 鼠标穿透 - 窗口扩展样式 `WS_EX_TRANSPARENT`,所有鼠标事件穿透到下层窗口 - 悬停检测改用屏幕坐标矩形判断(`MouseGetPos` 与窗口 rect 比较) ### UTF-8 配置 - 放弃 AutoIt 内置 `IniRead`/`IniWrite`(仅支持系统 ANSI) - 自定义解析器:`FileOpen(path, 256)` 读取 UTF-8 全文 + 手动 Section/Key=Value 解析 ### 性能优化 - 仅在悬停状态变化时重绘内容,滚动只移动窗口(`SetWindowPos`) - 文字测量结果缓存,避免每帧重复测量;测量用结构体静态复用,无重复分配 - `timeBeginPeriod(1)` 提升系统定时器精度,`Sleep(5)` 真实生效,动画节拍稳定 - 悬停检测每帧轮询(`MouseGetPos` 开销极小),悬停暂停响应 ≤16ms 更跟手 - 自适应 Sleep:暂停或无活动弹幕时 20ms,运行中有弹幕时 5ms,空闲 CPU 占用低 - 帧率约 60 FPS,CPU 占用低 ### 配置校验 - 启动时自动校验速度、透明度、字体、词库路径等参数范围 - 非法值自动回退默认并一次性提示,保证程序可用 --- ## 依赖 - AutoIt v3 内置库(无需额外安装): - `GDIPlus.au3` — GDI+ 绘图 - `WinAPI.au3` / `WinAPISysWin.au3` — Windows API 封装 - `StructureConstants.au3` — 结构体常量 - `TrayConstants.au3` — 托盘常量 - `File.au3` — 文件操作 - `Array.au3` — 数组操作 --- ## 致谢 - 作者:Solon - QQ 群:484043598 - 感谢使用,祝你学习进步