# 快捷计算器 **Repository Path**: xa87/quick-calculator ## Basic Information - **Project Name**: 快捷计算器 - **Description**: 一个轻量级桌面计算器,支持**实时运算**、**全局快捷键唤醒**、**系统托盘隐藏**,使用 C# Native AOT 编译为单文件可执行程序。AI生成。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-06-06 - **Last Updated**: 2026-08-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 快捷计算器 (QuickCalc) 一个轻量级桌面计算器,支持**实时运算**、**全局快捷键唤醒**、**系统托盘隐藏**,使用 C# Native AOT 编译为单文件可执行程序。 ![version](https://img.shields.io/badge/version-1.2.0-brightgreen) --- ## 界面预览 ![运行截图](运行截图.png) --- ## 功能特色 | 功能 | 说明 | |------|------| | 🔢 **实时计算** | 输入即计算,结果实时显示 | | 📋 **两种复制** | `Enter` 只复制结果;`Shift/Alt+Enter` 复制「表达式 = 结果」 | | ⌨ **全局快捷键** | 默认 `Alt+Z`:在前台则隐藏,已隐藏或在后台则显示并置顶获得焦点 | | 🎯 **后台常驻** | 关闭窗口/按 `Esc` 即隐藏到系统托盘,不退出 | | 🔣 **数学运算** | 支持加减乘除、括号、幂运算、三角函数等 | | ↔️ **位移运算** | 支持 `<<` `>>`,可与十六进制/二进制输入组合做位运算 | | 🔢 **十六进制/二进制输入** | 支持 `0x20`、`0XFF` 十六进制与 `0b1010`、`0B1111` 二进制字面量,结果均以十进制显示 | | ⚡ **AOT 编译** | Native AOT 编译,启动极快,无运行时依赖 | | 🚀 **开机自启** | 支持开机自动运行(`-min` 参数后台启动) | --- ## 快捷键 | 按键 | 功能 | |------|------| | `Alt+Z` (默认) | **智能切换**:窗口在前台 → 隐藏到托盘;窗口已隐藏或虽已显示但在后台 → 显示并置顶、自动聚焦输入框 | | `Enter` | 复制**结果**到剪贴板(如 `64`) | | `Shift+Enter` / `Alt+Enter` | 复制「**表达式 = 结果**」到剪贴板(如 `0x20+0x20 = 64`) | | `Esc` | 隐藏到系统托盘(不退出) | > **注意**:`Esc` 和关闭按钮一样是隐藏到托盘,不是退出程序。需在托盘图标右键 → 退出。 > **关于唤醒快捷键**:不再只看"是否可见"。窗口被其他程序挡住时按快捷键会切到前台(而不是把它藏起来); > 只有当窗口确实处于前台时才隐藏。窗口被最小化时同样会先还原再置顶。 > **自定义快捷键**:编辑 `calc_config.ini` 中的 `HotKey=` 项,支持组合: > - `Alt`, `Ctrl`, `Shift`, `Win` > - 按键: `A-Z`, `0-9`, `F1-F24`, `Space`, `Enter`, `Tab`, `Esc`, `Backspace` > > 示例: `HotKey=Ctrl+Shift+C` --- ## 支持的运算 ### 基本运算 | 运算符 | 示例 | 说明 | |--------|------|------| | `+` | `1+2` → 3 | 加法 | | `-` | `5-3` → 2 | 减法 | | `*` | `4*5` → 20 | 乘法 | | `/` | `10/3` → 3.333... | 除法 | | `^` | `2^10` → 1024 | 幂运算 (右结合) | | `<<` | `1<<3` → 8 | 左移 (见下方"位移运算") | | `>>` | `16>>2` → 4 | 右移 (见下方"位移运算") | | `( )` | `(1+2)*3` → 9 | 括号分组 | ### 数学函数 | 函数 | 示例 | 说明 | |------|------|------| | `sin()` | `sin(3.14159)` → ≈0 | 正弦 (弧度) | | `cos()` | `cos(0)` → 1 | 余弦 (弧度) | | `tan()` | `tan(0)` → 0 | 正切 (弧度) | | `sqrt()` | `sqrt(16)` → 4 | 平方根 | | `abs()` | `abs(-5)` → 5 | 绝对值 | | `round()` | `round(3.7)` → 4 | 四舍五入 | | `floor()` | `floor(3.7)` → 3 | 向下取整 | | `ceil()` | `ceil(3.1)` → 4 | 向上取整 | ### 常量 | 名称 | 值 | |------|-----| | `pi` | 3.1415926535... | | `e` | 2.7182818284... | ### 位移运算 支持 `<<`(左移)与 `>>`(右移),操作数按 **64 位整数**处理,结果以十进制显示。 **优先级**:与 C / Python 一致,`<<` `>>` 低于 `+ -`,高于 `* /`。左结合。 | 输入 | 结果 | 说明 | |------|------|------| | `1<<3` | 8 | 左移 3 位 | | `1<<3<<1` | 16 | 左结合:`(1<<3)<<1` | | `16>>2` | 4 | 右移 2 位 | | `-8>>1` | -4 | 算术右移,保留符号位 | | `1+2<<3` | 24 | 低于加减:`(1+2)<<3` | | `1<<2+3` | 32 | 右侧同理:`1<<(2+3)` | | `0x10<<2` | 64 | 与十六进制组合 | | `0b1010<<1` | 20 | 与二进制组合 | | `0xFF>>4` | 15 | 取高 4 位 | | `5<<2.7` | 20 | 移位量取整数部分(截断为 2) | **边界规则** | 情况 | 结果 | |------|------| | 移位量 ≥ 64(左移) | `0` | | 移位量 ≥ 64(右移) | 正数 → `0`,负数 → `-1` | | 移位量为负 | 反向移位,如 `8>>-1` → 16、`8<<-1` → 4 | | 非整数操作数 | 截断取整后参与运算 | | 单个 `<` 或 `>` | 非法表达式,显示 `⋯` | ### 十六进制字面量 以 `0x` 或 `0X` 为前缀即可输入十六进制数字(大小写均可,支持 `0-9` `a-f` `A-F`)。 十六进制数值会自动转换为十进制参与运算,**最终结果以十进制显示**。 | 输入 | 计算结果 (十进制) | 说明 | |------|------------------|------| | `0x20` | 32 | 十六进制 0x20 = 十进制 32 | | `0x20+0x20` | 64 | 多个十六进制相加 | | `0xFF*2` | 510 | 十六进制与十进制混用 | | `0x10-0x0A` | 6 | 十六进制相减 | | `0x1<<4` | 16 | 与位移运算符组合 | > **说明**:十六进制字面量可与普通十进制数字、括号、函数自由组合,例如 `sqrt(0x40)+10` → 18。 ### 二进制字面量 以 `0b` 或 `0B` 为前缀即可输入二进制数字(仅 `0` 和 `1`,最长 64 位)。 二进制数值会自动转换为十进制参与运算,**最终结果以十进制显示**。 | 输入 | 计算结果 (十进制) | 说明 | |------|------------------|------| | `0b1010` | 10 | 二进制 0b1010 = 十进制 10 | | `0b1010+0b1010` | 20 | 多个二进制相加 | | `0B1111` | 15 | 大小写均支持 | | `0b1010*2` | 20 | 二进制与十进制混用 | | `sqrt(0b100)+1` | 3 | 与函数组合(0b100=4, sqrt=2, +1=3) | ### 示例表达式 ``` 1 + 2 * 3 → 7 (1 + 2) * 3 → 9 2 ^ 10 → 1024 sin(pi / 2) → 1 sqrt(3^2 + 4^2) → 5 cos(3.14159) → -1 2 ^ 3 ^ 2 → 512 (右结合: 2^(3^2) = 2^9) 100 / (5 + 5) * 2 - 3 → 17 0x20 + 0x20 → 64 (十六进制输入,十进制输出) 0xFF * 2 → 510 sqrt(0x40) + 10 → 18 0b1010 + 0b1010 → 20 (二进制输入,十进制输出) 0B1111 * 2 → 30 sqrt(0b100) + 1 → 3 1 << 3 → 8 (左移) 1 + 2 << 3 → 24 (位移优先级低于加减: (1+2)<<3) -8 >> 1 → -4 (算术右移,保留符号) 0xFF >> 4 → 15 (取 0xFF 的高 4 位) ``` --- ## 配置文件 程序启动时自动读取所在目录的 `calc_config.ini`,不存在则自动创建。 ```ini [Settings] ; 唤醒快捷键 HotKey=Alt+Z ; 开机自动运行 (true/false) AutoRun=true ``` ### AutoRun 说明 - `AutoRun=true`(默认):程序首次启动时会自动写入注册表 `HKCU\...\Run`,实现开机自启 - 开机自启时传入 `-min` 参数,程序后台最小化运行,不显示主窗口 - 修改配置后重启程序即可同步注册表状态 --- ## 系统托盘 - 关闭窗口 / 按 `Esc` → 隐藏到系统托盘(不退出) - 双击托盘图标 → 智能切换(前台则隐藏,否则显示并置顶) - 右键托盘图标 → 菜单:显示、退出 > 若快捷键被其他程序占用(`RegisterHotKey` 失败),启动时会弹出托盘气泡提示,请更换 `calc_config.ini` 中的 `HotKey=`。 ## 命令行参数 | 参数 | 说明 | |------|------| | `-min` | 后台最小化启动(用于开机自启),不显示主窗口 | 无参数双击运行 → 正常显示主窗口。 --- ## 构建与发布 ### 环境要求 - .NET 10.0 SDK (或更高) - Windows x64 ### 开发调试 ```bash dotnet build dotnet run ``` ### AOT 发布(单文件,无需 .NET 运行时) ```bash dotnet publish -c Release -r win-x64 --self-contained ``` 输出文件:`bin/Release/net10.0-windows/win-x64/publish/QuickCalc.exe` #### ⚠ 发布失败排查:`LNK1181: 无法打开输入文件"advapi32.lib"` **根因**:ILC 通过查询**注册表**定位 Windows SDK,若运行环境禁止 `reg.exe`(沙箱 / 安全策略拦截), 生成的 `link.rsp` 中 `/LIBPATH:` 会变成空值,只剩 MSVC 库目录,于是 `kernel32.lib` / `advapi32.lib` 等 系统导入库全部找不到。 **解决**:显式给 `link.exe` 设置 `LIB` 环境变量(它会在 `/LIBPATH` 之外额外搜索),并禁用 MSBuild 节点复用 (否则复用的旧节点仍是旧环境,环境变量不生效): ```powershell $env:LIB = 'C:\Program Files (x86)\Windows Kits\10\Lib\\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\\ucrt\x64' $env:MSBUILDDISABLENODEREUSE = '1' dotnet publish -c Release -r win-x64 --self-contained -nr:false ``` > `` 用实际安装的版本号替换,例如 `10.0.26100.0`。 > 可用 `dir "C:\Program Files (x86)\Windows Kits\10\Lib\"` 查看。 **另一个常见失败**:`MSB3021 / MSB3027 无法复制到 publish\QuickCalc.exe ... 被另一个进程锁定` ——程序正在运行,旧 exe 被占用。先退出 QuickCalc(托盘图标右键 → 退出), 或临时发布到别的目录: ```bash dotnet publish -c Release -r win-x64 --self-contained -o bin/publish-v1.2.0 ``` --- ## 项目结构 ``` QuickCalc/ ├── Program.cs # 入口 ├── CalculatorForm.cs # 主窗口 + 系统托盘 + 快捷键处理 ├── ExpressionParser.cs # 数学表达式解析引擎 ├── ConfigManager.cs # calc_config.ini 读写 ├── HotKeyManager.cs # 全局快捷键管理器 ├── calc_config.ini # 运行时配置文件(自动生成) ├── QuickCalc.csproj # 项目文件(AOT 配置) └── README.md # 本文件 ``` --- ## 关于本项目 本项目由 **AI 辅助创建**。 | 条目 | 说明 | |------|------| | 🤖 **AI 模型** | DeepSeek-Flash | | 🧰 **开发工具** | [Reasonix](https://reasonix.ai) — AI 编码代理 | | 💬 **交互语言** | 中文(自然语言需求描述) | | ⏱ **开发时长** | 单轮对话完成全部编码 | | 💰 **Token 消耗** | 命中 96.58%,¥0.1411 耗时约 8分钟| ### 项目生成过程 1. 提出需求 → AI 编写分层实施计划 2. 逐模块生成代码:表达式引擎 → 配置模块 → 快捷键 → 主窗体 → 系统托盘 3. 自动适配 Native AOT 编译(解决 WinForms + AOT 兼容性) 4. 自动生成说明文档 + 初始化 Git 仓库 --- ## 许可证 MIT License