nameit: 通用化设备名水印(AHK v2),支持配置/开机自启/README

This commit is contained in:
Cheney
2026-10-29 16:06:53 +08:00
commit a970c6db8c
4 changed files with 498 additions and 0 deletions
+155
View File
@@ -0,0 +1,155 @@
# nameit —— 屏幕角落设备名水印
在屏幕任意角落常驻显示一段文字(默认是本机**电脑名**),像水印一样浮在所有窗口最上层,
**鼠标点击完全穿透**,不影响任何操作。白色字身 + 黑色描边,深浅背景都清晰。
![效果预览](docs/preview.png)
> 上图:同样一段文字,上半部在白色背景上(黑色描边清晰),下半部在深色背景上(白色字身清晰)。
---
## 1. 依赖
只需要 **[AutoHotkey v2](https://www.autohotkey.com/v2/)**,无需 Python / .NET / 任何第三方库。
- 安装 AHK v2 后,`AutoHotkey64.exe` 通常在 `C:\Program Files\AutoHotkey\v2\`。
- 脚本用 `A_AhkPath` 记录自身解释器路径,所以 AHK 装在别处也能正常开机自启。
## 2. 目录结构
```
D:\workbench\nameit\
├─ nameit.ahk 主程序(双击即可运行)
├─ nameit.ini 配置文件(文字、字体、颜色、位置)
├─ README.md 本说明
└─ docs\
└─ preview.png 效果图
```
## 3. 快速开始
1. 双击 **`nameit.ahk`**,屏幕左下角立刻出现电脑名。
2. 托盘区出现 AutoHotkey 图标,右键可进行全部操作。
默认显示的是本机电脑名(`A_ComputerName`)。想改成任意文字,见下面的配置说明。
## 4. 开机自启
任选一种:
| 方式 | 操作 |
| --- | --- |
| 托盘菜单(推荐) | 右键托盘图标 → 勾选 **开机自启**;再点一次即取消 |
| 命令行 | `nameit.ahk --install` 设置;`nameit.ahk --uninstall` 取消 |
| 手动 | 把 `nameit.ahk` 的快捷方式放进 `shell:startup` 文件夹 |
实际做法是在 `%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\nameit.lnk`
生成一个指向 `AutoHotkey64.exe "…\nameit.ahk"` 的快捷方式,不写注册表、不改系统设置。
## 5. 配置说明(nameit.ini)
改完保存后,右键托盘图标 → **重新载入配置**(或重启脚本)即可生效。
### [general]
| 键 | 默认 | 说明 |
| --- | --- | --- |
| `Text` | 空 | 显示的文字。**留空 = 自动使用电脑名** |
| `Case` | `as-is` | 大小写:`as-is` 原样 / `upper` 全大写 / `lower` 全小写 |
### [font]
| 键 | 默认 | 说明 |
| --- | --- | --- |
| `Face` | 空 | 字体名。留空 = 自动(纯英文 `Segoe UI`,含中文 `Microsoft YaHei UI`) |
| `SizePx` | `50` | **字高,单位像素**(精确到像素,不是磅值) |
| `Weight` | `700` | 字重:`700` 粗体,`400` 常规 |
### [color]
| 键 | 默认 | 说明 |
| --- | --- | --- |
| `Text` | `FFFFFF` | 字身颜色,RGB 十六进制 |
| `Stroke` | `000000` | 描边颜色 |
| `StrokeWidth` | `4` | 描边粗细(像素),`0` = 不要描边 |
### [layout]
| 键 | 默认 | 说明 |
| --- | --- | --- |
| `Corner` | `bottom-left` | 位置:`top`/`middle`/`bottom` + `left`/`center`/`right` |
| `Monitor` | `1` | 显示器编号,`1` = 主显示器 |
| `MarginX` | `24` | 距屏幕左右边缘的距离(像素) |
| `MarginY` | `18` | 距屏幕上/下边缘的距离(像素,自动避开任务栏) |
### 常用示例
```ini
; 显示固定文字,全大写,字号 72
[general]
Text=HORSE
Case=upper
[font]
SizePx=72
; 放到右上角、第二块显示器
[layout]
Corner=top-right
Monitor=2
; 黑字白边(浅色桌面上就是实心黑字)
[color]
Text=000000
Stroke=FFFFFF
```
## 6. 托盘菜单
| 菜单项 | 作用 |
| --- | --- |
| 显示 / 隐藏 | 临时隐藏水印,再点恢复 |
| 重新载入配置 | 重新读取 `nameit.ini` 并重绘 |
| 打开配置文件 | 用默认编辑器打开 `nameit.ini` |
| 开机自启 | 勾选/取消开机启动 |
| 退出 | 结束程序 |
## 7. 卸载
1. 右键托盘图标 → 取消勾选 **开机自启**(或运行 `nameit.ahk --uninstall`)→ **退出**。
2. 删除 `D:\workbench\nameit` 整个目录即可,不残留注册表项。
## 8. 常见问题
**Q:双击没反应 / 弹出「不是有效的 Win32 程序」?**
装的是 AHK **v1**。本脚本要求 v2,请到 <https://www.autohotkey.com/v2/> 安装 v2。
**Q:文字被任务栏挡住?**
程序定位用的是「工作区」(自动扣掉任务栏),正常不会重叠。若任务栏自动隐藏或换了位置,
拖动后 2 秒内会自动重新对齐。
**Q:多显示器只在一块屏上显示?**
默认主显示器(`Monitor=1`)。改 `Monitor=2`、`3`… 即可换屏;编号与 Windows 显示设置里的顺序一致。
**Q:全屏游戏 / 视频上看不到?**
独占全屏(DirectX exclusive fullscreen)的程序会盖住所有普通窗口,包括置顶窗口。
改成「无边框窗口化」即可看到。
**Q:字被某些深色/花哨壁纸淹没?**
把 `StrokeWidth` 调大到 `5`~`6`,或反过来用黑字白边(`Text=000000` / `Stroke=FFFFFF`)。
**Q:会影响我点击图标吗?**
不会。窗口带 `WS_EX_TRANSPARENT`,鼠标事件直接穿透到下方窗口;也不抢焦点、不出现在 Alt+Tab。
## 9. 实现原理(简述)
- 一个无边框 `WS_EX_LAYERED` 窗口,背景设为色键色,用 `SetLayeredWindowAttributes(LWA_COLORKEY)`
把背景抠成全透明,只剩文字。
- 文字用 GDI `CreateFontW(-像素高)` 创建,保证「字高 = 指定像素」;再 `WM_SETFONT` 应用到静态文本控件。
- 描边 = 以字形为中心、按半径采样一圈整数偏移,叠加多个同色文字层,最上层放白色字身。
- 置顶用 `WS_EX_TOPMOST` + `WinSetAlwaysOnTop`;穿透用 `WS_EX_TRANSPARENT`;不抢焦点用 `WS_EX_NOACTIVATE`。
- 每 2 秒按工作区重新定位,应对分辨率/任务栏/显示器变化。
---
许可:随意使用与修改。