在系统托盘实时显示数字小键盘(NumLock)开关状态的小工具,支持将 NumLock 保持常开。
C# / .NET 10 WinForms 编写,单文件绿色免安装,超轻量小包设计(约 176 KB)。自身不捆绑臃肿引擎,借用系统官方 .NET 10 运行时,自动无感享受 Windows Update 升级优化,真正零残留绿色便携。
- 托盘状态显示:键帽图标实时反映 NumLock 状态——实心键帽 = 开启,描边键帽 = 关闭,右下角绿点 = 保持常开模式。
- 保持常开(核心功能):开启后
- 拦截键盘上的 NumLock 键,按了也不会关闭;
- 每 300ms 看护一次状态,被其他程序关掉也会自动恢复为开启;
- 程序启动时若 NumLock 处于关闭状态,立即自动恢复。
- 双击托盘图标:快速切换 NumLock(保持常开模式下会提示先关闭该选项)。
- 开机自动启动:写入
HKCU\...\CurrentVersion\Run,无需管理员权限。 - 图标颜色:自动跟随系统主题,也可手动指定白色/黑色图标。
- macOS 风格精致紧凑菜单:右键菜单采用 12px 粗体(Weight 700)微交互排版,圆角面板、圆角蓝色高亮、自绘矢量勾选/分隔线/子菜单箭头,界面紧凑轻盈,配色随系统明暗动态切换。
- macOS 26 设计美学与多阶排版:全面采用 Squircle 连续曲率圆角矩形、DWM 瞬态亚克力毛玻璃材质(Transient Acrylic)、经典交通灯红点关闭控制与全窗平滑拖拽移动;弹窗与卡片建立 22px / 16px / 14px / 12px 层次丰富的字阶阶梯,全面采用纯 GDI+ 抗锯齿矢量渲染,杜绝任何 ClearType 边缘重影。
- 全尺寸高 DPI 适配(最高 8K 显示器,DPI 384+):完整适配 Per-Monitor V2 并在所有弹窗中实现
OnDpiChanged跨屏漫游动态重算;在 100%(96 DPI)、200%(4K 192 DPI)直至 400%(8K 384 DPI)高精显示器下均保持清晰锐利、无裁切、无失真。 - 单实例运行:重复启动只会提示“已在运行”。
- 自动更新:启动后会检查新版本(可在菜单里关闭),发现新版本自动下载并校验;下载完成后在退出时静默替换,下次启动即新版本。若上次是关机/注销结束(来不及替换),下次打开程序会自动完成替换并重启一次(无需任何操作);也可在菜单里选“重启并更新”立即生效。更新完成后会有一次“已更新到 X”的提示。
- 独立软件更新窗口:采用 macOS 风格独立居中卡片,告别 Windows 原生弹窗;下载阶段内嵌 6px 细长圆角胶囊进度条与
已下载 XX.X MB / XX.X MB (XX%)实时速率与数据量刷新(50ms / 20 FPS 流式节流渲染),支持随时取消与一键重启更新。 - 真正零残留便携模式:配置持久化于程序所在目录
config.json,删除软件文件夹即彻底清空系统无残留(只读保护环境自动安全回退至%AppData%\Numlock)。
除“检查更新/下载更新”外,程序不进行任何网络通信(不联网、无遥测、不采集任何数据)。更新检查默认在启动后自动进行一次,也可在菜单里点击“检查更新…”随时检查。
(截图由程序自带的自检模式渲染生成。)
深色任务栏(白色图标):
浅色任务栏(黑色图标):
右键菜单(浅色 / 深色):
关于软件窗口(macOS 26 风格独立卡片):
软件更新窗口(macOS 26 风格独立卡片):
应用图标:
- 从 Releases 下载
Numlock.zip并解压(极简小包,仅约 176 KB;解压出Numlock\文件夹)。- 极致轻量:单文件 exe 仅约 350 KB,直接借用系统已安装的官方 .NET 10 Desktop Runtime,自动无缝享受 Windows Update 静默推送的 .NET 10 安全补丁与 JIT 提速优化,无需重新下载软件。
- 双击
Numlock\Numlock.exe运行(SmartScreen 提示时选择“仍要运行”)。 - 托盘出现键帽图标后即可使用;双击图标切换,右键图标打开精致紧凑的 macOS 风格菜单。
发布页附有 zip 的 SHA-256,可用 certutil -hashfile Numlock.zip SHA256 核对下载完整性。
需要 .NET SDK 10.0+:
dotnet build Numlock.csproj -c Release发布免安装单文件极简版(约 350 KB):
dotnet publish Numlock.csproj -c Release -r win-x64 --self-contained false -p:PublishSingleFile=true -p:DebugType=None -p:DebugSymbols=false -o publish或直接运行 publish.cmd(自动编译、运行自动化自检门禁并打包免安装 zip Numlock.zip 及其 SHA256 校验和)。
--selftest <目录>:无头自检(需先退出正在运行的托盘实例)。渲染图标/菜单/预览 PNG 并做像素检查,实测 SendInput 切换与“保持常开”看护,并断言按键拦截判定与配置解析容错。--genico <路径>:生成多尺寸应用图标assets/Numlock.ico。--check-update:命令行检查更新(退出码 0=已最新、1=有新版本、2=检查失败;无控制台时以退出码为准)。--apply-update <目标exe> <旧进程ID> [--restart]:更新辅助模式(由程序自身在退出时调用,一般不手动使用)。
设置默认保存在软件所在目录下的 config.json(解压即用、删除整个软件文件夹即彻底清空,系统零残留)。若放置在只读受保护目录(如 C:\Program Files\),则自动安全降级保存至 %AppData%\Numlock\config.json:
{
"EnforceNumLock": false,
"IconColorMode": "auto"
}EnforceNumLock:true= 保持常开;false= 关闭(默认)。IconColorMode:auto(跟随系统)/white(白色图标)/black(黑色图标);非法值自动按auto处理。CheckUpdatesOnStart:true= 启动后自动检查更新(默认);false= 只在菜单里手动检查。UpdateNotifiedVersion:最近一次已提示过的更新版本(同一版本只提示一次;一般无需手动修改)。
文件损坏或无法解析时会自动恢复默认值,并把原文件备份为 config.json.bad。
程序遇到内部错误时会在同目录另写 error.log(仅排障用,可随时删除;超过 256KB 会自动重写)。
- Windows 10 / 11(x64)。
- 高 DPI 友好:100%–400% 缩放(含 4K / 8K 显示器与混合缩放多屏)。
- 自包含发布版无需任何运行时;源码构建需要 .NET SDK 10.0+。
- “保持常开”在极端情况下(被高权限窗口拦截、系统回收钩子等)会降级为约 300ms 的自动纠偏(按键可能闪断),程序会气泡提示,功能不中断。
- 未做代码签名:首次运行时 SmartScreen 提示属正常现象(选择“仍要运行”)。
- 个别安全软件可能对键盘钩子机制给出提示,属其启发式判断。
- 自动更新需要能写入程序所在目录;放在只读位置(如某些 U 盘/受保护目录)时,程序会提示改为手动下载。








