上班鼓励器_桌宠版

当前版本 v1.2.31 | Windows 桌面浮窗 + 桌面宠物 | 本文所有配图均来自项目真实运行截图与素材,路径相对于本文件,可整体拷贝 docs/ 目录。

头图:桌宠常驻桌面一角,会跟着你的键盘和鼠标做动作。


本文配图索引

图 文件 说明
头图 images/hero.png 产品横幅,展示三只形象
七只形象 images/characters.png 全形象一览卡片
右键菜单 images/menu.png 形象选择页实拍
打字实测(男孩) images/typing_boy.png 12 帧 PrintWindow 连拍
打字实测(女孩) images/typing_girl.png 12 帧 PrintWindow 连拍
主窗口 images/main_window.png 实时工资浮窗界面
图标 images/logo.png 应用图标素材

一、这是什么

「上班鼓励器」是一个双形态的 Windows 小工具:一个实时算工资的浮窗主窗口,加一个 140×140 的桌面宠物。宠物挂在屏幕角落,会镜像你的键鼠操作------你敲键盘它就打字,你点鼠标它就伸手,戳它一下它会端起杯子喝咖啡。

项目 说明
运行形态 主浮窗(可隐藏) + 独立分层桌宠窗口(始终置顶、可拖动)
技术栈 Python + pywebview(WebView2) + WinForms 自绘右键菜单 + 低级键鼠钩子
打包 PyInstaller(免安装目录) + Inno Setup(安装程序)
数据 %LOCALAPPDATA%\上班鼓励器\work_data.json;EXE 同级存在同名文件时走便携模式
诊断日志 %TEMP%\gotowork_pet.log,启动行会打印 version=x.y.z tag=...
单实例 内核命名互斥体;重复启动会唤起已运行窗口,不会开出第二个

图标素材(256×256)。


二、七只形象,右键随时切换

七只形象全部为项目运行时实拍(PrintWindow 抓帧),已统一抠底、等高排版。

key 名称 动画形式 备注
dino 恐龙噜噜 分层 PNG 最早的一只,头像素材为 lulu2_64.png(95×128,非 80 方图)
labubu Labubu 分层 PNG 兔耳宇航服
dance 上班噜噜 59 帧图集 三角波往复循环,骑小车
hajimi 哈基米 分层 PNG 戴耳机的橘猫
work 认真工作 分层 PNG 圆眼镜 + 书本的橘猫
boy 男孩 9 帧整帧图集 v1.2.29 参考女孩重制的配对版:棕短发、粗黑圆框眼镜、奶油米色卫衣
girl 女孩 9 帧整帧图集 同风格 3D 黏土 Q 版办公女孩

男孩 / 女孩走的是「整帧精灵表 + 事件驱动状态机」,与其余五只的分层动画是两套机制。新增这类形象时必须同步把 key 加进 app.py 的 _PET_FRAME_ANIM,否则键鼠镜像与右键命中形状都会失效。

右键菜单

右键菜单第 1 页(形象选择),当前项带 ✓ 标记。截图摄于 5 形象时期,现在是 7 只;第 0 页为「显示/隐藏主窗口 · 切换卡通人物 › · 退出程序」。

菜单是自绘无边框 WinForms 窗体,分两页、带 hover 高亮;翻开下一页时会按新页高度重算圆角 Region。低级鼠标钩子只吞掉落在人物身上的右键,其余位置照常走系统菜单。


三、会跟着你动的桌宠

宠物的动作由系统级键鼠钩子驱动,经队列投递到宠物页的 boyActivity(type / mouse / poke),再由页面状态机切帧:

  • 敲键盘 → 打字循环(抬手 / 落键两拍);
  • 点鼠标 → 伸手点鼠标(带 260ms 冷却,避免连点把序列无限重启);
  • 戳一下人物 → 端杯喝咖啡(男孩配置为 coffee:false,不做这个动作);
  • 视线跟随 → 眼球按鼠标位置偏移;眨眼、拖动倾斜、呼吸微动常驻。

v1.2.31:把「敲键盘」做得看得出来

早期版本打字帧 1--4 与待机帧只有 1.5%--3% 的像素差异,双手几乎不动;舞台实际只有 83.75×134px,手指级动作在屏幕上不过十来个像素,95ms 的四帧轮播只是把「几乎没动」高速闪了一遍。

最终没有改任何图集,而是加了一层运行时可读的敲键节拍:

手段 实现
落键顿挫 #typebob 抬手上浮 1.5px、落键下沉 3.5px + ≤1° 前倾,110ms 过渡;全程只用位移与旋转,绝不缩放(避免出现忽大忽小)
键盘高光 #typefx 左右各一个暖白光晕,落键那一侧亮 380ms,左右交替
节拍 TYPE_SEQ 四步两拍(210 / 150ms,约 1.4Hz):左抬 → 左落 → 右抬 → 右落
隔离 换形象立刻收势;不再占用拖动倾斜层,不与拖宠物打架

男孩:模拟真实敲键时的 12 帧连拍。可见键盘暖白高光左右交替、人物有落键顿挫。

女孩:同一套节拍,高光位置对她的键盘同样贴合。

运行时实测(PrintWindow 连拍 + 像素差量化):

指标 静止 打字
相邻帧可见差异 0.03--0.06% 11.4--11.5%(峰值 17%)
键盘区域平均亮度 137.5 145--159
键盘区域峰值亮度 217 249--253

男孩、女孩各 12 帧验收:无黑屏、白边、绿边、裁切或变形;切到恐龙后模拟敲键差异仅 1--2%(它自身的呼吸动画),其余形象不受影响。复测脚本见 _tools/verify_typing_runtime.py。


四、主窗口(与浮窗版的关系)

主窗口:今日已赚、下班倒计时、工时进度与股票持仓。

桌宠版是在原「桌面浮窗版」之上叠加的宠物层,浮窗功能全部保留:

  • 💰 按时薪 × 已工作工时(扣午休)每秒刷新「今日已赚」,含下班倒计时、工时进度、本月累计;
  • 📈 A 股持仓每 5 秒刷新行情,当日浮动盈亏自动并入「今日已赚」,红涨绿跌;
  • 🕶️ 老板键 默认 Alt + ~,可在设置里录制任意组合或关闭,全局生效;
  • ⚙️ 时薪、上下班时间、请假日、小数位、主题等配置本地持久化。

更完整的浮窗功能说明见仓库根目录 上班鼓励器_产品介绍.md 与 APP_FEATURES.md(那份文档引用的 screenshots/ 图为旧界面)。


五、安装与运行

text 复制代码
# 安装版(当前交付物)
installer\上班鼓励器_Setup_v1.2.31.exe

# 免安装版
dist\上班鼓励器\上班鼓励器.exe

# 源码版
pip install -r requirements.txt
python app.py

静默安装(Git Bash 下必须关掉路径转换,否则参数会被改写):

bash 复制代码
MSYS2_ARG_CONV_EXCL="*" ./installer/上班鼓励器_Setup_v1.2.31.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART

安装程序 post-install 会启动应用并占用文件锁,静默安装命令建议后台执行;用 explorer.exe "<exe 路径>" 启动 GUI 才不会被会话结束时回收。


六、常见问题

现象 原因与处理
源码版启动约 2s 静默退出、stdout 全空 单实例锁:安装版进程还在跑,先 Stop-Process
改了配置却不生效 打包版读 %LOCALAPPDATA%\上班鼓励器\work_data.json,与源码目录那份互不影响
不知道跑的是哪个版本 看 %TEMP%\gotowork_pet.log 启动行的 version= / tag=
抓宠物窗截图全黑 分层 / Chromium 合成窗口要用 PrintWindow(hwnd, memDC, 2),ImageGrab 的 BitBlt 抓不到内容
char:<key> 第一次没切成功 偶发超时,重跑一次并核对日志 char -> 最后一条
相关推荐
SomeOtherTime19 分钟前
Rust 面向对象介绍(AI回答)
开发语言·python·rust
duansamve27 分钟前
Flask中视图函数接收请求数据和返回响应实例
python·flask
用户298698530141 小时前
用 Python 自动化把 JavaScript 代码转换为 Word 文档
javascript·python·api
用户019027581611 小时前
AlphaFeed 标的池(universes)全解:CN_Stock / CN_ETF 与权限边界
python
青少儿编程课堂2 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会Scratch考级:校园连连看解析
c++·python·算法·bfs·信息学竞赛
用户0332126663672 小时前
如何使用 Python 将 JSON 转换为 Excel
python·excel
小小张说故事2 小时前
Python 的切片到底切了什么:拆开 slice 对象、负步长和 __getitem__
python
用户9562562542917 小时前
跟做:Firecrawl 单页转 Markdown 再丢进沙箱总结
python·api
威哥爱编程18 小时前
模拟面试智能体开发实战 02:回答等半分钟,谁还愿意练?把服务端和流式输出搭起来
python·agent·harmonyos