中文文档 | English
Windows 11 桌面小工具:把多个 AI 套餐的配额(5 小时用量、7 天用量、30 天用量……)集中显示在一个无边框半透明的小部件里。
大多数 AI 供应商没有配额 API,所以本工具的做法是:给每个服务配一个网址,用内置 WebView2 定期打开该页面(通常是已登录状态),按你在设置界面里配置的提取规则从页面上抓取配额数值。规则默认是「按标签自动定位」——只要标签和页面上显示的文字一致(如「每周使用额度」)就行,不需要任何 CSS 知识;高级用户也可以填 CSS 选择器精确控制。全程图形化配置,不需要手改任何文本文件。
- 同一供应商多账号:服务勾选「独立会话(同站点多账号)」后使用独立的浏览器 profile 与 Cookie 存储,同一供应商的多个账号可并排监控、互不串号;未勾选的服务维持共享 profile,同一域名仍只需登录一次。
- 赠送用量重置(Codex「Usage limit resets」/ 智谱「用量重置额度」):卡片显示可用次数与最早到期时间(24 小时内变黄);智谱每条的到期时间在「重置管理」弹层里,抓取时自动点开读取再关闭;已过期次数自动隐藏。
- 英文月名日期显式解析:
Oct 4, 9:57 AM这类无年份英文日期不再依赖不可靠的 BCL 解析。
完整说明见 v1.6.0 Release Notes。
- 无边框圆角深色半透明小部件,按住空白处拖动,位置自动保存;置顶可开关;不透明度可调;背景色可设定(取色对话框含屏幕取色器;Win11 毛玻璃下该色作为 tint,alpha 决定透出程度);滚轮整体缩放界面(含文字),标题栏 100% 按钮一键还原
- Windows 11 原生化:小部件用 DWM Acrylic 毛玻璃、设置/历史/取色窗口用 Mica,深色沉浸、圆角与系统 8px 对齐;图标按钮换 Segoe Fluent Icons(刷新/暂停/关闭/警告),hover/pressed 分层反馈;Win10 自动降级为实色圆角
- 每个服务一张卡片:主题色圆点 + 名称(Ctrl+点击直接在浏览器打开官方用量页面,按住 Ctrl 时名称变链接样式)+ 最后刷新时间(订阅行右侧小字,今天显示时分、跨天带日期);每条配额一行:标签 + 百分比 + 细进度条 + 用量明细/重置时间
- Alt+拖拽排序卡片:虚影悬浮窗自由跟手(可拖出窗口),其他卡片 150ms 丝滑让位,顺序持久化
- 全局颜色主题:进度条按 4 种语义状态着色——正常(主题主色)、接近基准(用量距时间基准线 10 个百分点以内;无基准时 ≥60%)、超出基准(用量跑在时间前面)、90% 告警(用量 ≥90% 优先于其他状态)。内置蔚蓝/翡翠/紫罗兰/落日/石墨 5 套预设一键切换,也可选「自定义」逐色修改(颜色选择对话框带屏幕取色器),见下文「颜色主题」
- 时间基准线:进度条上的竖线 = 按时间均匀消耗此刻应到的位置(5 小时窗口过半在 50%,7 天窗口第 4 天在 57%)。白芯深边 = 用量未超线(余量健康);红芯白边 = 用量已超线(用得偏快,注意省着用);悬停进度条有文字说明。窗口长度从规则标签推断(
5 小时/5-hour→5h、7 天/周/week→7 天、月/month→30 天),标签不含窗口信息或没有重置时间则不显示;可在设置里全局开关 - 纵向罗列 / 横向铺开两种布局,窗口自动适应内容大小
- 定时自动刷新(默认 5 分钟,全局/单服务均可配),后台顺序执行不卡 UI;页面加载超时可配(全局设置,默认 30 秒,渲染慢的站点调大)
- 标题栏 ⟳ 强制刷新全部服务;每张卡片右上角也有 ⟳,只刷新该服务;刷新期间显示「刷新中…」且按钮禁用,点击一定排队执行不丢失
- 暂停抓取:标题栏 ⏸ 全局暂停(也可在右键/托盘菜单勾选「暂停抓取」),每张卡片的 ⏸ 单独暂停该服务——暂停期间完全不访问供应商(规避风控/敏感时期),但倒计时与基准竖线仍每分钟本地更新,已有数据保留显示(卡片置灰标记「已暂停」);恢复后立即补抓。设置里也可按服务勾选
- 右键菜单 + 系统托盘菜单:立即刷新 / 置顶 / 布局切换 / 设置 / 显示隐藏 / 退出,托盘双击显示/隐藏
- 异常状态:「需要登录」卡片带去登录按钮(弹出内置浏览器手动登录,关闭后自动重新抓取);抓取失败显示红字错误,tooltip 有完整信息
- 陈旧数据回退:刷新失败(timeout、导航失败等)但此前成功抓过时,卡片保留显示上次数据并加琥珀色小字「⚠ 刷新失败,当前显示 HH:mm 的数据」(hover 看完整错误);重启后立即显示上次会话数据并同样标记,首次成功刷新自动替换。「需要登录」仍显示专属卡片,不掩盖重新登录的行动
- 用量历史:每次成功刷新按配额行记录一条百分比样本(仅存本机
history.jsonl,保留 30 天、超 7 天自动稀释)。点击配额行打开历史窗口:24 小时 / 7 天 / 30 天趋势图(重置锯齿分段绘制)+ 当前 / 区间增量 / 速率 / 按近 24 小时速率预测重置时到几 %,可导出 CSV。全局设置可关闭记录 - 配额阈值提醒:任一配额向上跨过阈值(默认 90%,可调)时弹托盘气泡,仅跨过瞬间一次
- 开机自启(全局设置可选,当前用户 Run 注册表项);窗口位置掉出所有屏幕时自动夹回/居中
- WebView2 默认使用共享用户数据目录(
%LOCALAPPDATA%\AIQuotaMonitor\WebView2UserData),同一域名只需登录一次;服务在设置里勾选「独立会话(同站点多账号)」后改用独立 profile 与独立 Cookie 存储,同一供应商可挂多个账号并排监控(各自登录一次) - 赠送重置次数(Codex「Usage limit resets」、智谱「用量重置额度」):卡片显示可用次数与最早到期时间(24 小时内变黄提醒);智谱每条的到期时间在「重置管理」弹层里,抓取时自动点开读取再关闭;已过期的次数自动隐藏
- 下载最新版
AIQuotaMonitor.exe(自包含单文件,不依赖 .NET 运行时,唯一要求是系统装有 WebView2 Runtime——Windows 11 一般自带)。 - 直接双击运行。首次启动会在 exe 同目录生成
config.json(内含一个未启用的示例服务)。 - 在小部件上右键 → 设置…,把示例服务改成你的服务,或点「添加」新建。
建议把 exe 放在一个固定目录(如
D:\Tools\AIQuotaMonitor\)再运行,配置文件会保存在 exe 旁边。从旧版本升级:先从托盘退出程序,再用新版 exe 替换旧 exe;保留同目录的
config.json。登录态和历史数据保存在%LOCALAPPDATA%\AIQuotaMonitor\,无需迁移。
假设你在用某个 AI 服务,它的控制台有个用量页 https://console.example.com/usage,页面上显示「本周期已用 42%」和「12 / 50 次 · 3 天后重置」。
- 先登录:设置里添加服务并保存后,卡片会显示「需要登录」,点「去登录」在内置浏览器里登录一次即可(之后共享登录态)。
- 配服务:
- 名称:
示例 AI - 网址:
https://console.example.com/usage - 额外等待秒数:
10(这是超时上限而非死等——工具会每 0.5 秒轮询页面,任一定位文本出现就立即开始抓取,快的话 1 秒就完成;渲染慢的 SPA 会等到上限) - 未登录指示选择器:可选。如果未登录时页面上总有「登录」按钮,就填它的选择器(如
.login-btn),命中即判定未登录
- 名称:
- 配规则(点「添加」,CSS 选择器全部留空即可):
- 规则一:标签
5 小时用量,类型百分比,正则点预设「百分比 %」→(\d+(?:\.\d+)?)\s*% - 规则二:标签
30 天用量,类型用量对,正则点预设「a/b 用量对」→(\d+)\s*/\s*(\d+)。重置时间不用配,会自动识别页面上的「重置时间:…」
- 规则一:标签
- 调试:选中该服务,点「测试抓取」。下方会显示每条规则抓到的原始文本和解析结果——标签没命中就把标签改成页面上的一字不差的文字;数值不对就根据原始文本调整正则,直到解析正确。
- 保存后立即生效:重建卡片、重启定时器;只有新增或配置有变化的服务会重新抓取,没动过的服务保留现有数据和刷新节奏(想强制全部刷新,点小部件上的 ⟳)。
工作原理(自动定位模式):工具在页面上找到显示「标签」文字的元素(如「每周使用额度」标题),然后从它向上找到包含数值的容器区域(通常就是那张用量卡片),在区域内用正则取第一个匹配的数字,并在同一区域内自动识别重置时间(「重置时间:…」「…后重置」「将于…重置」「Resets in …」都能认)。搜索范围包括主文档和所有同源 iframe;如果还是全部抓不到,说明内容可能在跨域 iframe 里(同源策略导致 JS 读不到,阿里云控制台就是这样——登录窗口里能看到内容是因为渲染不受限),此时工具会自动收集这些 iframe 的地址、直接导航过去再抓一遍。标签就是定位锚点,所以标签必须与页面显示文字一致。
多语言页面:有的网站会按浏览器语言显示不同文字(比如你的浏览器里是「5 小时用量」,工具内置浏览器里可能是「5-hour usage」)。工具的内置浏览器已设置为中文环境,多数网站会直接渲染中文;如果个别网站仍显示英文,在规则的「定位文本」里填多个别名、用 | 分隔即可,如 5 小时用量|5-hour usage,命中任意一个都算(此时标签保持中文,只影响卡片显示名)。
何时需要 CSS 选择器(高级):当同一个标签文字在页面上出现在多个区域、或标签与数值不在同一容器时,可以填写 CSS 选择器把范围精确锁定到目标元素(浏览器 F12 右键元素 → 复制 selector)。填了选择器就走「选择器模式」:正则只在该元素文本内匹配。
| 字段 | 说明 |
|---|---|
| 标签 | 卡片上显示的名称,如「5 小时用量」。自动定位模式下它还是默认的定位锚点,需与页面显示文字一致 |
| 定位文本 | 可选。留空 = 用标签定位;多语言页面可填多个别名,用 ` |
| 类型 | 百分比:页面直接给出 xx%;用量对:页面给出 a / b,自动算百分比并显示明细「a / b」 |
| CSS 选择器 | 留空(推荐)= 自动定位:按标签文字在页面上找数值区域;填写 = 选择器模式,正则只在该元素文本内匹配 |
| 正则 | 第一个捕获组是数值;百分比预设 (\d+(?:\.\d+)?)\s*%,用量对预设 (\d+)\s*/\s*(\d+)(两个捕获组) |
| 数值为剩余百分比 | 可选。页面显示「剩余」而非「已用」时开启(如 73% remaining → 显示已用 27%),仅百分比类型生效。数值旁明确写有 left/剩余/remaining 时会自动换算,无需开启 |
| 重置选择器 | 可选。仅选择器模式生效。抓取重置时间文本用的选择器,留空对整页匹配 |
| 重置正则 | 可选。自动定位模式下留空会自动识别「重置时间:…」「…后重置」「Resets in …」;自定义时第一个捕获组作为展示文本,不区分大小写 |
服务级字段:名称、网址、额外等待秒数、未登录指示选择器(可选)、刷新间隔(可选,留空用全局)、订阅信息网址(可选)。
所有卡片共用一套全局配色,按语义分 4 种状态色 + 1 个强调色:
| 色板 | 语义 |
|---|---|
| 强调色 | 卡片服务圆点 |
| 正常 | 用量落后时间基准线较多(无基准线时 <60%) |
| 接近基准 | 用量距时间基准线 10 个百分点以内(无基准线时 ≥60%) |
| 超出基准 | 用量跑在时间基准线前面(用得偏快) |
| 90% 告警 | 用量 ≥90%,优先级最高 |
「全局设置」顶部的颜色主题下拉提供 5 套预设:蔚蓝 / 翡翠 / 紫罗兰 / 落日 / 石墨,选中即预览(下方五行色板同步显示该主题色),保存后生效。
选「自定义」后五行色板变为可点击:点击色块打开颜色选择对话框(大色块预览、#RRGGBB 输入、R/G/B 滑块)。对话框里的「屏幕取色」按钮可拾取屏幕上任意颜色:点击后整屏冻结,移动光标时旁边显示 7×7 像素放大镜和当前 hex,左键单击取色,Esc 或右键取消。
配置存于 config.json 的 theme 字段(name 为预设 key 或 "custom",自定义时另存五个 hex);旧配置没有 theme 字段时自动使用「蔚蓝」;老版本的服务级 color 字段读入时忽略、不再写入。
工具抓到重置文本后会立刻解析成绝对时间存起来(所以「2 小时后重置」这类相对时间不会越显越不准),支持的原文格式包括:重置时间:16:33、重置时间:2026-07-26 10:00、07-23 14:44 后重置、2026-08-17 后重置、2026-07-23 15:42:00 重置、将于 2026年7月29日 1:04 重置、Resets in 07-23 14:44、Resets Jul 29, 2026 1:04 AM(英文月名)、3 天后重置、3天9小时29分钟后重置 等;解析失败则原样显示原文。
全局设置里有这些开关:
- 统一重置时间格式(默认开):各家供应商日期格式五花八门,开启后按统一格式显示。格式框提供预设(
MM-dd HH:mm、yyyy-MM-dd HH:mm、MM月dd日 HH:mm、HH:mm),也可以手动输入任意 .NET 日期格式串。 - 重置倒计时分级预警(随每分钟界面重绘自动变色):短窗口(≤24h,如 5 小时)剩 1 小时变黄、30 分钟变橙红;长窗口(7 天/30 天)剩 24 小时变黄、2 小时变橙红——窗口快重置、剩余额度抓紧用。套餐到期同理:剩 5 天变黄、1 天变橙红。颜色取自主题语义色(黄=接近、橙红=超出),随主题切换
- 配置了「未登录指示选择器」:抓取时页面上命中该选择器 → 卡片显示「需要登录」+ 去登录按钮。
- 未配置:所有规则都抓不到值 → 判定「抓取失败(可能未登录或页面结构变化)」,同样给出「去登录」按钮。
- 点「去登录」弹出内置浏览器(与抓取共享登录态),手动登录后直接关闭窗口,工具自动重新抓取该服务。
需要 .NET SDK 10:
# 构建
dotnet build app/AIQuotaMonitor.csproj -c Release
# 发布:自包含单文件 exe(不依赖任何环境)
dotnet publish app/AIQuotaMonitor.csproj -c Release -r win-x64 --self-contained true `
-p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -o publish/产物为 publish/AIQuotaMonitor.exe,可直接拷贝运行。
界面支持简体中文和 English(含设置面板、右键菜单、托盘菜单、卡片状态、登录窗口、气泡通知与错误信息):
- 默认跟随系统语言:系统 UI 语言是中文则显示中文,否则显示英文。
- 快速切换:小部件右键菜单或托盘菜单里的「语言 / Language」子菜单,可在 跟随系统 / 中文 / English 之间单选切换,立即生效(无需重启)并写入
config.json的language字段("auto"/"zh"/"en")。 - 设置面板的「全局设置」里也有同样的语言下拉,保存后生效。
不初始化 WebView2,用内置示例数据渲染主窗口并截图退出。主窗口共七张卡片,覆盖全部状态:正常(三条配额覆盖正常/超基准/90% 告警色)/ 需要登录 / 抓取失败(去登录)/ 陈旧回退 / 陈旧+疑似未登录 / 抓取失败(查看页面)/ 暂停+订阅过期:
AIQuotaMonitor.exe --test-shot out.png # 纵向
AIQuotaMonitor.exe --test-shot out.png --layout horizontal # 横向
AIQuotaMonitor.exe --test-shot out.png --lang en # 指定界面语言(zh/en)
AIQuotaMonitor.exe --test-history-shot out.png # 用量历史窗口(合成样本)
AIQuotaMonitor.exe --test-settings-shot settings.png # 设置窗口(两个页签)
AIQuotaMonitor.exe --test-frames frames_dir # 动画帧序列(合成演示 GIF)config.json 保存在 exe 同目录(System.Text.Json,camelCase):服务列表与规则、窗口位置、置顶、不透明度、布局方向、刷新间隔都在其中,每个服务带一个稳定 id 字段(用量历史按它关联)。正常情况不需要手改——拖动窗口、切换置顶/布局都会自动保存。
工具会在抓取配额时顺带扫描页面全文(含同源 iframe),自动识别订阅信息并显示在卡片名称下方,如「订阅 31 天后到期 · 自动续费 关」:
- 到期时间支持的写法:
结束时间 2026-08-24、剩余天数 31 天、下次自动续费时间:2026-08-17、08月03日自动续费、will be canceled on Aug 19, 2026等;剩 5 天变黄、1 天变橙红提醒 - 自动续费:识别「自动续费 开启/未开启」文本、「下次自动续费时间」等隐含信息,以及页面开关控件(switch/checkbox)的实际状态
- 如果订阅信息不在用量页(如智谱在「套餐概览」页、Codex 在 Billing 页),在服务的「订阅信息网址」里填那个页面即可;这类服务按 6 小时缓存抓取订阅信息,不会每次刷新都多开一页。留空则在用量页面上顺带扫,零成本
两个文件都保存在 %LOCALAPPDATA%\AIQuotaMonitor\,仅存本机、不上传:
| 文件 | 内容 |
|---|---|
lastgood.json |
每个服务最后一次成功抓取结果(刷新失败 / 重启后的陈旧数据回退源) |
history.jsonl |
用量百分比时间序列样本,每行一条,如 {"t":"2026-08-05T22:55:01+08:00","svc":"<id>","rule":"5 小时用量","pct":42,"detail":"2.1 / 5 小时","resetAt":"…"} |
- 历史保留 30 天;超过 7 天的样本自动稀释为每小时一条。
- 点击卡片上的配额行打开历史窗口(24 小时 / 7 天 / 30 天切换),统计含:当前值、区间增量(自上次重置后累计)、近期速率(%/小时)、按近 24 小时速率预测「重置时约几 %」。
- 全局设置可关闭「记录用量历史」(关闭不清空已有数据,删除文件即清除)。
- 序列按规则的稳定 id 关联,改标签后历史保留(v1.3.0 之前的旧样本按标签回退关联)。
这个项目在适配五家供应商的过程中踩过的坑,对配置新服务有参考价值:
- 隐藏抓取窗口必须有正常视口尺寸(1280x800)。曾经用 1x1 透明窗口,结果阿里云这类懒加载 SPA 靠视口/可见性触发渲染,视口过小就不生成内容 DOM,JS 永远抓空。症状是「登录窗口里一切正常,抓取就是找不到文字」。
- 跨域 iframe:渲染可见 ≠ JS 可读。同源策略下 JS 读不到跨域 iframe 的内容。工具的解法:收集读不到的 iframe 地址,直接把隐藏浏览器导航过去再抓(变成顶层页面即无限制)。
- 会话级 Cookie vs 持久 Cookie。阿里云等站点的登录票据可能是会话级的,Chromium 只存内存、进程退出即失——日常浏览器感觉不到是因为它的进程常年不死。工具会在每次抓取(包括失败/提前返回)、登录窗口关闭和正常退出时,把全部 Cookie 用 DPAPI 加密并原子落盘,启动时还原。但服务端会话到期仍无解,只能重新登录。
- 内置浏览器语言会改变页面文案。把 WebView2 设为中文后,Kimi/Codex 的页面文案从英文变中文,导致英文标签失效。规则的「定位文本」支持
中|英多别名就是为这个准备的。 - 轮询等待优于固定等待。SPA 渲染时间不确定,固定等 N 秒不是慢就是空;现在是每 0.5 秒轮询,「额外等待秒数」只是超时上限。
- 页面骨架比数据先渲染,「有匹配」不等于「数据到了」。阿里云页面的进度条轴刻度(0% 50% 90% 100%)先于真实数值出现,曾导致抓到 0%。解法:容器内有多个匹配时取字号最大的元素(大数值永远比刻度字大),等待轮询也升级为「提取成功且质量达标(唯一匹配或大字号匹配)」才放行。
- 导航失败 ≠ 页面没加载。阿里云控制台的重定向链会让 WebView2 误报导航失败,必须检查页面实际内容再下结论。
- 错误信息要带现场。笼统的「抓取失败」无法排查;现在失败时会附每条规则的具体原因 + 页面标题和正文开头,一眼分清是未登录、标签不对还是页面结构变了。
- 正则
\b对中文不生效。CJK 字符都算 word 字符,「小时用量」的「时」和「用」之间没有边界——\b只能挂在英文分支上(天|days?\b)。这个坑在相对时间解析和窗口长度推断里各踩过一次。 - “刷新”也是配额重置语义。火山 Coding Plan 新版使用「5天11时56分钟后刷新」而非「重置」,且小时缩写为「时」。默认规则同时识别「重置/刷新」与「小时/时」;任何 5 小时额度为 0 且没有重置时间时,都会显示首次调用后开始计时,已有真实倒计时则保持原样。
Q:启动提示缺少 WebView2 Runtime?
工具依赖 WebView2 Evergreen Runtime(Windows 11 一般自带)。缺失时程序会弹出安装提示,按提示到微软官网下载安装「WebView2 Runtime 长青版」即可:https://developer.microsoft.com/zh-cn/microsoft-edge/webview2/ 。安装后重启本程序。可通过注册表 HKLM\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients 下「Microsoft Edge WebView2 Runtime」项的 pv 值确认版本。
Q:抓不到数据 / 显示「抓取失败」? 打开「设置」,选中该服务,点「测试抓取」:
- 提示「页面导航失败」:错误信息里附了最终地址和标题——若是被重定向到登录页,先「去登录」;现在导航报错后会自动检查页面实况,有内容会继续抓(阿里云控制台这类重定向链已兼容);
- 提示「找不到定位文本」:标签与页面显示文字不一致,改成一字不差(页面渲染慢的情况已改为轮询等待,「额外等待秒数」是超时上限,渲染慢就调大);
- 看「原始文本」——如果是登录页内容,先点卡片上的「去登录」;
- 如果有目标数字但解析失败,照着原始文本调整正则(注意让第一个捕获组正好是数值);页面显示的是「剩余 xx%」时:数值旁写明 left/剩余/remaining 会自动换算为已用,没有这类字样才需要开「数值为剩余百分比」;
- 如果标签文字在页面多个区域出现导致抓错区域,再考虑填 CSS 选择器精确锁定(浏览器 F12 右键元素 → 复制 selector)。
Q:登录态能保持多久?
登录信息保存在 %LOCALAPPDATA%\AIQuotaMonitor\WebView2UserData;会话 Cookie 另以当前 Windows 用户的 DPAPI 加密保存到 cookies.dat。开启「独立会话」的服务使用 Sessions\<服务Id> 独立 profile 与 cookies-<服务Id>.dat 独立存储。应用会在抓取的所有结果、登录窗口关闭和正常退出时保存,尽量避免客户端丢失。服务端签发的真实过期时间不会被延长;服务端会话失效后仍需重新登录。当某个服务从正常变为需要登录时,托盘会弹气泡提醒。
Q:为什么阿里云控制台之前每次重启工具后都要重新登录?
根因是阿里云的登录票据(login_aliyunid_ticket)是会话级 Cookie——Chromium 只把会话级 Cookie 存在内存,浏览器进程退出即失;日常浏览器感觉不到,是因为它的进程常年不死(启动加速/后台模式)。自 v1.5.0 起,工具会在每次抓取结果、登录窗口关闭和正常退出时把全部 Cookie 导出、用 DPAPI(当前用户)加密并原子保存到 %LOCALAPPDATA%\AIQuotaMonitor\cookies.dat,下次启动时自动还原,会话 Cookie 也能跨重启存活。注意:这只能解决客户端会话丢失,阿里云服务端会话本身较短——若服务端到期,仍需点一次「去登录」(托盘会有气泡提醒)。
Q:某个服务抓失败会影响其他服务吗? 不会。各服务独立抓取、独立计时,单个服务失败只在它自己的卡片上显示错误。
app/
AIQuotaMonitor.csproj net10.0-windows,WPF + WindowsForms,Microsoft.Web.WebView2
App.xaml(.cs) 入口、单实例、命令行参数(--test-shot 等)、全局深色样式
Models.cs AppConfig / ServiceConfig / QuotaRule / 抓取结果模型
ConfigStore.cs config.json 读写(原子写、损坏备份、默认值、JSON 深拷贝)
I18n.cs UI 多语言(zh/en 字符串表、跟随系统解析、Changed 事件)
ColorTheme.cs 全局颜色主题(5 套预设 + 自定义解析、状态色语义)
Backdrop.cs Win11 DWM 背景材质(Acrylic/Mica、Win10 降级)
ScrapeEngine.cs 隐藏宿主窗口 + 共享 WebView2,导航→等待→JS 提取
CookieStore.cs Cookie 导出/还原(DPAPI 加密,过期清理)
PaceBaseline.cs 时间基准线(窗口推断、已过比例)
ResetTimeParser.cs 重置时间解析(中英/相对/绝对)与分级显示
GhostWindow.cs 拖拽排序虚影悬浮窗
MainWindow.xaml(.cs) 小部件窗口、定时刷新、托盘、右键菜单
ServiceCard.xaml(.cs) 服务卡片(正常 / 需要登录 / 抓取失败 / 陈旧回退)
SettingsWindow.xaml(.cs) 设置界面(服务/规则编辑、预设、测试抓取、全局设置、颜色主题)
ColorPickerDialog.xaml(.cs) 颜色选择对话框(hex/RGB 滑块 + 屏幕取色器)
LoginWindow.xaml(.cs) 内置浏览器登录窗口
HistoryStore.cs 用量历史样本 history.jsonl(追加/稀释/查询)
LastGoodStore.cs 上次成功结果 lastgood.json(陈旧回退源)
HistoryWindow.xaml(.cs) 用量历史窗口(手绘趋势图 + 统计)
TestShot.cs --test-shot / --test-settings-shot / --test-frames 截图模式
- 本工具仅供个人查询自己账号的用量信息:它用你本机已登录的会话打开供应商页面、在本地解析并展示,不上传登录凭据或用量数据。为保持登录和显示连续性,会在本机保存 WebView2 profile,并以当前 Windows 用户的 DPAPI 加密保存 Cookie;上次成功抓取结果与用量百分比历史保存在
lastgood.json/history.jsonl(历史记录可关闭、删文件即清除)。请遵守各供应商的服务条款,不要用于批量抓取、自动化滥用或任何违反目标网站规则的用途。 - 各供应商名称与商标归其各自所有者所有,本项目与它们无任何隶属或背书关系。
- 第三方组件许可:.NET 运行时(MIT,自包含打包随附)、Microsoft.Web.WebView2(WebView2 Runtime 许可,允许随应用再分发)、System.Security.Cryptography.ProtectedData(MIT)。
- 本项目以 MIT 协议发布(见 LICENSE),按「现状」提供,不担任何担保。


