吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 623|回复: 6
上一主题 下一主题
收起左侧

[原创工具] Go语言写的 金银价格桌面悬浮窗

  [复制链接]
跳转到指定楼层
楼主
danran 发表于 2026-7-2 10:57 回帖奖励
本人第一个开源的GO程序
源码地址:https://gitee.com/anglers/lookGoldPrice
软件下载地址https://gitee.com/anglers/lookGoldPrice/releases



金银价格桌面悬浮窗

实时显示黄金/白银价格的 Windows 桌面悬浮窗程序,纯 Go + Win32 API 实现,零依赖第三方 GUI 库

Platform
Go
Version
License

功能特性

  • 浮动于桌面的小型透明窗口,显示黄金(RTJ/国际)和白银(RTJ/国际)实时价格
  • 支撑鼠标拖拽随意移动,双击窗口退出
  • 右键菜单配置:
    • 开机自启动
    • 文字颜色(11 色可选)
    • 文字大小(10px ~ 28px)
    • 窗口透明度(30% ~ 100%)
    • 显示买入价/卖出价切换
    • 背景颜色(8 色可选)
  • 启动自动检查更新(若选择「稍后再说」,一周内不再自动弹出)
    • 右键菜单「检查更新」可随时手动触发
    • 关于信息(含当前版本号)
  • 配置自动持久化至 %LOCALAPPDATA%\GoldPrice\config.json
  • 数据每 3 秒自动刷新(API 异常不影响窗口工作)
  • 窗口位置记忆,首次自动居中,后续记录上次位置
  • 兼容 Windows 7 / 10 / 11

自动更新

启动时自动检查: 软件启动后自动调用 Gitee Releases API 检查是否有新版本:

  1. 发现新版本 → 弹出深色风格更新对话框,显示版本对比和更新内容
  2. 点击「立即更新」→ 显示带进度条的下载窗口,实时展示下载进度
  3. 下载完成 → 自动生成批处理脚本,退出当前程序 → 替换旧 exe → 启动新版本
  4. 点击「稍后再说」→ 记录跳过时间,一周内不再自动弹出更新窗口

手动检查: 右键菜单选择「检查更新」可随时手动触发(不受跳过限制),始终显示检查结果。

整个过程全自动,无需手动操作。

截图(窗口示例)

  • 深色背景 + 圆角
  • 金色"金"标签 / 银色"银"标签
  • 上方:融通金价格 / 国际金价
  • 下方:融通银价格 / 国际银价
  • 中间分隔线

技术栈

层面 技术
语言 Go 1.25
窗口系统 Win32 API(user32.dll
图形绘制 GDI(gdi32.dll
字体渲染 CreateFontW + ClearType
透明度 WS_EX_LAYERED + SetLayeredWindowAttributes
拖拽 WM_NCHITTEST 劫持为 HTCAPTION
配置存储 JSON 文件写入 %LOCALAPPDATA%
开机自启 注册表 HKCU\Software\Microsoft\Windows\CurrentVersion\Run
HTTP 请求 net/http + 连接池复用
线程安全 sync.RWMutex + sync.Mutex + Channel
编译链接 -H=windowsgui(无黑窗口控制台)
自动更新 Gitee Open API + 自定义深色 UI 对话框 + 批处理自替换

关键设计

完全不依赖 GUI 框架。 直接通过 syscall.NewLazyDLL 调用 Windows 原生 DLL:

user32.dll   →  RegisterClassExW, CreateWindowExW, GetMessage, DispatchMessage, ...
gdi32.dll    →  CreateFontW, RoundRect, DrawTextW, SetTextColor, ...
kernel32.dll →  GetModuleHandleW
advapi32.dll →  RegOpenKeyExW, RegSetValueExW(注册表开机自启)

防卡死机制:

  • runtime.LockOSThread() 锁定消息循环到同一 OS 线程
  • 网络请求在独立 goroutine 执行,通过 channel 与 UI 线程通信
  • cfg 配置读写加 sync.RWMutex,消除数据竞争
  • 所有 GDI 操作(brushes/pens/fonts)用后立即释放,无泄漏
  • WM_CLOSE / SC_CLOSE 被拦截,窗口不会意外消失

构建 & 运行

编译

go build -ldflags "-H=windowsgui -s -w" -o gold.exe .
flag 作用
-H=windowsgui 编译为 Windows GUI 子系统,启动不显示控制台
-s 去除符号表
-w 去除 DWARF 调试信息

运行

双击 gold.exe 或在终端启动:

.\gold.exe

窗口将在屏幕中央出现,右键打开配置菜单。

配置文件

位置:%LOCALAPPDATA%\GoldPrice\config.json

示例内容:

{
  "fontSize": 16,
  "alpha": 85,
  "colorName": "white",
  "bgName": "dark",
  "priceMode": "sell",
  "autoStart": false,
  "windowX": 960,
  "windowY": 540,
  "skipUpdateUntil": 0
}
字段 含义 默认值
fontSize 字号(px) 16
alpha 透明度(百分比) 85
colorName 文字颜色预设名 white
bgName 背景颜色预设名 dark
priceMode 显示买/卖价(buy/sell sell
autoStart 开机自启 false
windowX 窗口 X 坐标(-1=居中) -1
windowY 窗口 Y 坐标(-1=居中) -1
skipUpdateUntil 跳过更新提示截止时间(Unix 时间戳) 0

数据接口

GET https://vapi.danran0.cc/boot/api/price

返回 JSON,包含融通金/国际 黄金/白银/铂金等品种的买入价与卖出价,本项目使用:

  • hj_rtj(黄金·融通金) → 上方左边
  • hj_gj(黄金·国际)→ 上方右边
  • by_rtj(白银·融通金)→ 下方左边
  • by_gj(白银·国际)→ 下方右边

菜单快捷键(右键)

操作 说明
左键拖拽 移动窗口
双击窗口 退出程序(自动保存位置)
右键 → 关闭 退出程序
右键 → 检查更新 手动检查 Gitee 最新版本,支持一键更新
右键 → 关于 显示软件版本号

项目结构

gold/
├── main.go            # 入口:窗口创建、消息循环
├── winapi.go          # Win32 API 绑定、常量、结构体定义
├── config.go          # 配置结构、预设颜色/大小、配置读写持久化
├── menu.go            # 右键菜单构建、菜单命令处理
├── paint.go           # GDI 字体、透明度、窗口绘制
├── fetch.go           # HTTP 数据拉取、价格解析
├── autostart.go       # 注册表开机自启管理
├── update.go          # 自动更新:Gitee API 检查、自定义 UI 对话框、进度条下载、自替换
├── go.mod             # Go 模块定义
├── go.sum             # 依赖校验
├── app.manifest       # Windows 应用程序清单(DPI 感知 + 兼容性声明)
├── jintiao.ico        # 应用图标
├── gold.exe           # 编译产物
└── README.md          # 本文件

更新机制

Version

更新检查通过 Gitee Open API 获取 lookGoldPrice Releases 最新版本信息:

  • 启动自动检查:软件启动时自动检查更新,若用户选择「稍后再说」则记录跳过时间(7 天),期间不再自动弹出
  • 版本比较:语义化版本号对比(如 2.1 vs 2.0),自动去除 v 前缀
  • 下载源:优先从 release Assets 中查找 gold.exe,备用直接下载 URL
  • UI 风格:自定义深色无边框对话框,与主窗口风格一致,带金色装饰条和圆角按钮
  • 进度展示:自定义进度窗口,实时显示已下载/总大小、百分比、传输速度
  • 自替换:下载完成后生成批处理 → 退出 → 等待旧进程释放 → 覆盖 → 启动新版本

系统兼容性

通过 app.manifest 声明支持:

  • Windows 7
  • Windows 8 / 8.1
  • Windows 10
  • Windows 11

所有调用的 Win32 API 自 Windows 2000 起就存在,兼容性良好。字体回退逻辑优先用微软雅黑,Win7 精简版无此字体会自动回退至宋体。

License

MIT

免费评分

参与人数 2吾爱币 +3 热心值 +2 收起 理由
Duke0910 + 1 + 1 谢谢@Thanks!
梦想家C + 2 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
梦想家C 发表于 2026-7-2 11:25
希望增加勾选只显示金/银
3#
kulouxiaohai 发表于 2026-7-2 11:44
4#
 楼主| danran 发表于 2026-7-2 11:46 |楼主
5#
rmb1069 发表于 2026-7-2 14:10
底层信息获取靠谱不
6#
cansen110 发表于 2026-7-2 20:31
不错!!!!
7#
傻笑对暗号 发表于 2026-7-2 21:48
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-7-3 07:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表