FEATURED · 精选文章

RunCat 365 技术全解析:用任务栏里奔跑的猫实时感知 CPU 负载与系统状态

发布时间 / 2026/9/15 20:26:37
来源 / 创域科博编辑部
栏目 / 资讯中心
RunCat 365 技术全解析:用任务栏里奔跑的猫实时感知 CPU 负载与系统状态 RunCat 365 技术全解析用任务栏里奔跑的猫实时感知 CPU 负载与系统状态【免费下载链接】RunCat365A cute running cat animation on your windows taskbar.项目地址: https://gitcode.com/GitHub_Trending/ru/RunCat365RunCat 365 是一款基于 C# / .NET 9.0 与 Win32 技术栈构建的 Windows 桌面应用让一只猫常驻在任务栏中以奔跑速度直观映射当前设备的 CPU 负载——负载越高猫跑得越快系统空闲时它便悠闲散步。本文以 docs/content.md 为核心骨架结合仓库源码深入讲解其负载映射原理、六类系统指标采集实现、自定义奔跑者Custom Runner配置规范、内置小游戏机制、多语言本地化与安装 FAQ帮助读者全面理解这款应用的设计与实现细节。一、产品定位与核心特性RunCat 365 的核心理念只有一句话Cat living in the taskbar.——在任务栏里养一只猫用最自然的方式告诉你设备此刻忙不忙一眼看负载Load at a glance不需要阅读数字猫的奔跑节奏就是 CPU 负载的直观映射。任务繁忙时猫加速奔跑一切平静时猫放慢脚步散步。丰富的系统指标Rich system metricsCPU、GPU、内存、温度、存储与网络六类指标尽收眼底全部聚合在任务栏与托盘信息中。一点小慰藉A little comfort在任务间隙看到这只猫本身就是一种放松内置的小游戏还能让你在需要休息时短暂喘息。从项目结构看RunCat365.csproj 与 README.md该应用使用 C#、Win32 API 与 Windows Forms 构建面向 .NET 9.0并通过 Microsoft Store 分发最低支持 Windows 10 版本 19041.0。二、核心机制CPU 负载如何驱动猫的奔跑这是整个应用最核心的设计问题猫的奔跑速度如何与系统负载挂钩仓库中的SpeedSource枚举与Cat状态机给出了答案。2.1 速度来源的选择从 SpeedSource.cs 可以看到猫的速度可以被绑定到三种系统指标之一CPU以 CPU 占用率为速度源默认GPU以 GPU 占用率为速度源Memory以内存占用率为速度源该文件通过TryParse方法将配置字符串CPU、GPU、Memory解析为对应的枚举值解析失败时回退到 CPU。这意味着用户可以让猫的速度跟随 CPU、GPU 或内存中的任意一项指标。2.2 CPU 指标的采集PerformanceCounter 与 Task Manager 兼容逻辑CPURepository.cs 是 CPU 采集的核心实现其中包含一段值得注意的兼容性设计private const string PROCESSOR_INFORMATION_CATEGORY Processor Information; private const string PROCESSOR_CATEGORY Processor; private const string PROCESSOR_UTILITY_COUNTER % Processor Utility; private const string PROCESSOR_TIME_COUNTER % Processor Time; private const int PROCESSOR_TIME_BASED_TASK_MANAGER_MINIMUM_BUILD 26100;采集逻辑遵循以下策略优先从Processor Information类别读取% Processor Utility计数器该计数器更接近现代 CPU 的真实利用率包含睿频等动态因素当系统版本 build 号大于等于 26100即新版本 Windows 的 Task Manager 改为以% Processor Time显示 CPU 占用时自动切换读取% Processor Time计数器保证与用户看到的 Task Manager 数值一致同时采集% User Time与% Privileged Time用于区分用户态与内核态占用每次更新都会将新样本放入一个最多保留 5 条的cpuInfoList队列并在Get()时对 5 条样本取平均值返回从而平滑波动避免猫的速度剧烈抖动。Update()中对数值做了Math.Min(100, ...)钳制确保百分比不超过 100%。2.3 猫的状态机Running 与 JumpingCat.cs 定义了猫的两类动画状态机Running5 帧循环动画running_0running_4通过(CurrentFrame 1) % 5轮转帧对应正常奔跑状态Jumping10 帧动画jumping_0jumping_9主要用于小游戏中的跳跃动作。每个帧还通过ViolationIndices()返回一个索引列表从源码结构看这是用于判定动画帧与动作语义如落地、抬腿之间违规关系的帧约束描述供游戏物理与动画校验使用。帧资源以cat_*_*命名的位图形式内嵌在资源文件Strings.resx中由FrameAnimationView等视图层循环播放。此外Runner.cs 中的枚举显示应用内置了三种默认奔跑者runnerCat5 帧、Parrot10 帧、Horse14 帧每种奔跑者拥有独立的帧数配置。三、可监控的六类系统指标源码级实现解析原文档在 What you can monitor 一节列出了任务栏可监控的指标清单CPU 使用率、GPU 使用率、内存性能、机器温度、存储容量、网络速度。仓库中每个指标都有独立的 Repository 实现下面逐一结合源码展开。3.1 GPU 使用率GPURepositoryGPURepository.cs 使用 Windows 性能计数器类别GPU Engine与计数器Utilization Percentage并通过engtype_3D过滤器只保留 3D 引擎实例从而得到 GPU 的真实占用率每REFRESH_INTERVAL_TICKS30 个更新周期调用一次RefreshInstances()刷新实例列表以应对 GPU 实例变化如新进程创建对全部 3D 实例的利用率取平均值与最大值分别作为 GPUInfo 的两个字段同样使用最近 5 条样本求平均的平滑策略并做Math.Min(100, ...)钳制。GPU 不可用如无独立 GPU 或性能计数器缺失时IsAvailable返回 false指标自动隐藏。3.2 内存性能MemoryRepositoryMemoryRepository.cs 通过 P/Invoke 调用 Win32 的kernel32.dll!GlobalMemoryStatusEx函数获取物理内存状态[LibraryImport(kernel32.dll, SetLastError true)] [return: MarshalAs(UnmanagedType.Bool)] internal static partial bool GlobalMemoryStatusEx(ref MemoryStatusEx lpBuffer);它从MemoryStatusEx结构体中读取dwMemoryLoad内存负载百分比、ullTotalPhys物理内存总量与ullAvailPhys可用物理内存进而算出已用内存总量 − 可用。展示时通过ToByteFormatted()扩展见 ByteFormatter.cs将字节数格式化为人类可读的单位。3.3 机器温度TemperatureRepositoryTemperatureRepository.cs 读取性能计数器类别Thermal Zone Information下的Temperature计数器。需要特别注意的是Windows 原始计数器返回的是**开尔文K**数值代码做了如下处理跳过 0的无效样本减去KELVIN_TO_CELSIUS_OFFSET 273.15f转为摄氏度只保留处于−50 ℃ 150 ℃合理区间内的样本过滤传感器噪音计算全部热区的平均温度与最高温度。温度显示还支持摄氏度/华氏度切换TemperatureInfoExtension中定义了CELSIUS_TO_FAHRENHEIT_SCALE 9.0f / 5.0f与OFFSET 32.0f由 TemperatureUnit.cs 中的枚举与Resolve()逻辑决定展示单位。3.4 存储容量StorageRepositoryStorageRepository.cs 遍历DriveInfo.GetDrives()当前仅支持C 盘与 D 盘见Drive枚举与CreateFromString的C:\\、D:\\匹配对每个就绪的磁盘读取总量与可用空间计算出使用率百分比以及已用/可用字节数。树形指示器TreeFormatter见 TreeFormatter.cs会为每个磁盘生成使用率、已用、可用三行嵌套信息。3.5 网络速度NetworkRepositoryNetworkRepository.cs 通过NetworkInterface.GetAllNetworkInterfaces()挑选活跃网络接口并做了严格的过滤排除Loopback回环与Tunnel类型要求接口状态为OperationalStatus.Up从描述字符串中排除包含vpn、tap、virtual、tun的虚拟/隧道接口确保统计的是真实物理网络流量。速度计算采用经典的两次采样差值法记录上一次的BytesSent/BytesReceived与时间戳在下一次更新时计算(当前字节数 − 上次字节数) / 时间差得到每秒发送与接收速率字节/秒再格式化为带/s后缀的可读单位。四、自定义奔跑者把你的关键帧动画放进任务栏原文档明确提出Not a cat person? No problem.——你可以准备自己的关键帧动画让一个属于你的角色在任务栏里奔跑。这一功能由 CustomRunnerRepository.cs 与 CustomRunnerForm.cs 共同实现。4.1 存储布局与配置格式自定义奔跑者保存在用户本地应用数据目录下的RunCat365/CustomRunners文件夹中每个奔跑者一个子目录目录名由角色名经过SanitizeDirectoryName清洗非法文件名字符替换为_统一转小写得到帧图片统一命名为frame_0.png、frame_1.png、…按序存储所有角色的元信息汇总在目录根部的profiles.json中。CustomRunnerProfile.cs 定义了 JSON 配置的字段结构使用System.Text.Json的JsonPropertyName映射{ name: MyRunner, frameFileNames: [frame_0.png, frame_1.png, frame_2.png] }name奔跑者名称保存时按名称去重同名覆盖frameFileNames帧图片文件名列表按数组顺序组成动画序列。profiles.json以WriteIndented true的缩进 JSON 格式落盘便于人工检查与调试。4.2 帧约束与自动缩放自定义奔跑者的帧图片有严格的尺寸与数量约束常量定义于CustomRunnerRepository参数限制帧数下限MIN_FRAME_COUNT2 帧帧数上限MAX_FRAME_COUNT30 帧帧高上限MAX_FRAME_HEIGHT32 px帧宽下限MIN_FRAME_WIDTH10 px帧宽上限MAX_FRAME_WIDTH32 px若导入的图片超出上述尺寸ResizeFrame会按高度等比缩放scale 32 / 原始高度将宽度钳制在 1032 px 之间并统一缩放到 32 px 高度最后使用InterpolationMode.HighQualityBicubic高质量插值重绘——这也是任务栏角色保持小巧清晰的保证。帧数不满足 230 时Save直接返回 false拒绝写入。4.3 加载与容错LoadFrames按frameFileNames顺序逐个加载位图文件缺失或加载失败ArgumentException/OutOfMemoryException/FileNotFoundException时自动跳过该帧并输出调试日志不导致应用崩溃。Delete删除角色时同步清理帧文件与目录并重写profiles.json。加载/写入profiles.json过程中的 JSON 或 IO 异常也会被捕获并回退为空列表。五、内置小游戏空格键驱动的无尽奔跑忙碌之余RunCat 365 内置了一个仅用空格键控制的无尽跑酷小游戏EndlessGameForm.cs窗口为固定大小600×250居中显示窗体文本与图标均从本地化资源获取使用System.Windows.Forms.TimerInterval 100即 100ms 一帧驱动游戏循环猫复用Cat.Running状态机在跳跃时切换到Jumping的 10 帧动画障碍物由 Road.cs 中的枚举如Sprout随机生成初始化时用随机数铺满 20 个障碍槽位跳跃判定阈值JUMP_THRESHOLD 17配合键盘事件KeyDown触发跳跃请求游戏记录当前得分与最高分最高分持久化在用户设置UserSettings.Default.HighScore见 UserSettings.settings。从源码结构看游戏还内置isAutoPlay字段支持自动演示模式渲染使用DoubleBuffered true双缓冲避免闪烁并在窗体关闭时统一释放定时器与所有位图资源避免 GDI 句柄泄漏。六、多语言本地化原文档 FAQ 指出 RunCat 365 支持七种语言英语、日语、简体中文、繁体中文、法语、德语与西班牙语。从仓库资源目录看本地化实现基于 .NET 标准 ResX 资源体系除默认 Strings.resx英语外还包含以下语言资源文件Strings.de.resx德语Strings.es.resx西班牙语Strings.fr.resx法语Strings.ja.resx日语Strings.ko.resx韩语Strings.zh-CN.resx简体中文Strings.zh-TW.resx繁体中文即仓库实际交付了包含韩语在内的 8 个语言资源文件。所有 Repository 中的展示文案如SystemInfo_CPU、SystemInfo_Memory等均通过Strings强类型资源访问保证在切换系统语言时整个界面与托盘信息同步本地化。七、安装、Bug 反馈与 FAQ7.1 安装要求RunCat 365 通过 Microsoft Store 分发最低系统要求为Windows 10 版本 19041.0 或更高。安装后应用常驻系统托盘与任务栏无需额外配置即可开始工作。7.2 常见问题FAQ 原文整理Q1支持哪些语言RunCat 365 支持多种语言覆盖英语、日语、简体中文、繁体中文、法语、德语、西班牙语等仓库另含韩语资源。Q2这和原版 macOS 的 RunCat 是同一个应用吗不是。RunCat 365 是 Windows 专属版本使用 Windows Forms 构建并通过 Microsoft Store 分发。它继承了 RunCat 的设计精神但是一款独立应用。也因此项目不接收关于 macOS 版本的咨询。Q3如何反馈 Bug 或请求新功能请前往项目的 GitHub 仓库按照 Issue 模板提交 Issue。需注意项目约束仅接受英文 Issue 与 Pull Request不遵循模板的 Issue 会被直接关闭。功能请求请通过 Issue 提出而不是在贡献者社区讨论中提交。7.3 隐私说明根据 docs/privacy_policy.md开发者不通过 RunCat 365 收集任何个人信息若涉及付费功能支付信息也由第三方结算平台处理开发者不会获取支付数据。所有系统指标CPU、GPU、内存、温度、存储、网络均为本地采样不上传任何遥测数据。八、总结RunCat 365 的技术实现可以概括为三条主线负载可视化以SpeedSourceCPU/GPU/Memory为速度输入通过CPURepository等 Repository 完成指标采样与滑动平均平滑再驱动Cat/Runner帧动画最终由任务栏渲染层播放——把枯燥的百分比变成一只奔跑的猫指标全景六类系统指标分别由 CPURepository.cs、GPURepository.cs、MemoryRepository.cs、TemperatureRepository.cs、StorageRepository.cs、NetworkRepository.cs 采集兼顾了 Task Manager 数值一致性、传感器噪音过滤与虚拟网卡排除等工程细节可扩展的趣味性自定义奔跑者通过%LocalAppData%/RunCat365/CustomRunners/profiles.json实现低门槛扩展内置小游戏则在休息时刻提供轻量娱乐。对开发者而言这份仓库是学习 Windows 性能计数器PerformanceCounter、P/Invoke 内存查询、多语言 ResX 本地化以及轻量动画状态机的良好参考样例对普通用户而言安装后只需瞥一眼任务栏就能读懂这台设备此刻的忙碌程度。【免费下载链接】RunCat365A cute running cat animation on your windows taskbar.项目地址: https://gitcode.com/GitHub_Trending/ru/RunCat365创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻