[自荐]Tip_Clock,到点自动弹出提醒的时钟

简介

一个能够自动贴边隐藏并在你设置的时间弹出提醒的程序(还能同时播放自定义提示音呢)。

(原名AutoTipClock)

其实我把他当上课铃和下课铃用的

本程序支持设置多个时间提醒,支持自定义系统快捷键,支持自定义文字颜色、背景颜色、背景透明度等诸多设置。

视频演示

使用说明

  1. 首次打开时自动生成配置文件到同目录
  2. 修改配置文件后请手动重启程序(颜色、透明度除外,为实时更改)
  3. 点击托盘或使用快捷键即可唤出程序,再次点击可隐藏
  4. 可拖动软件调整位置
  5. 可以播放自定义铃声(仅支持wav格式)

配置文件如下

# ──────────────────────────────────────────────
#  Tip Clock 配置文件
# ──────────────────────────────────────────────
#  时间格式: HH:MM:SS (24小时制)
#  audio: 配置目录内的 WAV、FLAC 或 MP3 文件名(可省略扩展名)
#  省略 audio 时仅显示时钟,不播放音频
#  热重载: display_time 和 [[schedule]](自动规范化、去重)
#  仅重启生效: auto_start、volume、hotkey_mod、hotkey_key
#  颜色、透明度和窗口位置请通过程序界面修改
# ──────────────────────────────────────────────

[general]
# 开机自启 (Windows 启动时自动运行)
auto_start = {auto_start}

# 背景颜色 RGB (0-255), 不透明度 (0-100, 0=全透明)
bg_r = {bg_r}
bg_g = {bg_g}
bg_b = {bg_b}
bg_opacity = {bg_opacity}

# 文字颜色 RGB (0-255)
text_r = {text_r}
text_g = {text_g}
text_b = {text_b}

# 临时显示时间, 秒 (1-60)
display_time = {display_time}

# 默认音量 (0-100)
volume = {volume}

# 显示/隐藏快捷键
# 修饰键: alt, ctrl, shift, win (可用 + 组合)
hotkey_mod = "{hotkey_mod}"
hotkey_key = "{hotkey_key}"

# 窗口显示位置 (左上角像素坐标, -1 表示自动定位)
window_x = {window_x}
window_y = {window_y}

[[schedule]]
# 有声音的提醒;首次创建配置时会同步生成 demo.mp3
time = "08:00:00"
audio = "demo"

[[schedule]]
# 静音提醒:省略 audio
time = "13:42:57"

下载

https://github.com/Mikachu2333/tip_clock/releases/latest

2 个赞

对了,之前还发现个问题忘说了,运行久了之后提示时间会不准(不清楚是不是个例)

然后将75行time_now = time_now.addsecond(1) 改成time_now = time()就好了

再就是直接加上了一个整体透明度mainForm.transparent(99)修改了颜色、换了字体,缺点是文字也透明了

一开始原代码就是 time_now = time() :joy:
后来发现占用系统资源稍高,有时能达到0.1%,给我吓得直接改掉了,然后就变成了现在这样子,每隔3小时刷新一次系统时间,大幅度减少交互。

刚刚测试了一下,找到了原因,是因为sleep(1000)实际上不能精确且延迟高导致的时间不断减慢。然后我又改回了一开始的反复刷新的版本,结果发现弹出的时候又开始一卡一卡的了,时间无法实时刷新……时间精确和动画流畅二者好像只能取其一……果然还是得暑假用正经语言重构一遍比较好

至于透明度……仍然在想办法实现底色透明文字实体……

其实可以改成在弹出之前10秒才取一次准确时间吧,其他时候都用addsecond。最好的方式应该是用多线程,把时间校准和移框动画分别放在不同的线程里

现在已经是多线程了,3个线程呢…… :smiling_face_with_tear:

第一个线程负责GUI的显示隐藏,系统快捷键注册,程序退出等,是aardio自带的,无需更改
第二个线程负责一开始载入ini配置文件并将相关配置传递给第三线程,同时使第三个线程开始运行
第三个线程负责接收第二个线程传入的数据并获取时间、暂停时间、判断是否弹出等主要设置

现在正在头大要不要把第三个线程再拆分一下

这个能设置每半个小时/一个小时提醒么

能啊,麻烦了点 :joy:
你把每个时间点写一个就好的其实

&000000
&003000
&010000

大概这样子

有趣啊。昨天看到推送的时候就在想是不是aardio写的,今天一看源码果然是。找个时间学习一下代码。
难得碰到一样用aardio的人,有机会可以交流一下。

这也太麻烦了吧 :joy:

其实如果只是倒计时的话你可以用另一个大佬开发的软件的 :joy:

这些功能有计划开发,等考完试暑假里面会用正经的语言全部重构一遍顺便加上新功能

好啊好啊,用aar的确实少,网上的相关讨论也很少见……

另外我刚才粗略看了一下源码,你时间的显示方式用的是static控件?
我觉得plus控件可能更好用,所以我打算仿写一个,看看效果如何。

我也想改plus控件来着,不过发现很多属性得重新写一遍,各种多线程传参要命就没管

还有,大哥你要是有能力就帮忙改改多线程吧 :melting_face: 尤其是看看能不能在多线程内指定快捷键,不要让用户手动去点右下角的任务栏图标……我一直在寻找方法,一直以来每次都是传参阻碍了我……
目前已经放弃了这个东西,暑假看看重构一遍算了 :man_facepalming:

如果不去做窗口的滑动动画,是否就不需要多线程了?
目前我拿plus控件已经做了一个时钟出来,还没加上定时弹出的功能,但是应该快了。暂时没发现哪里需要多线程 :joy:
screenshots

大神,请问有什么办法把时间和冒号都改为白色呢?

你好,软件的内部颜色需要手动更改代码实现,因过于麻烦,暂时未提供相关借口与设置,现给你手动编译了一个版本。

请查看邮箱附件。

带来了一堆安全性更新,支持mp3 和flac了

Release 1.3.3 大量安全性改进,支持mp3, flac · Mikachu2333/tip_clock

1.3.4 改进默认快捷键,避免快捷键注册静默失败
Release 1.3.4 改进快捷键注册,避免静默失败 · Mikachu2333/tip_clock

修复了菜单栏更新不及时的问题

1.3.6 已发布
Release 1.3.6 新功能:热重载 · Mikachu2333/tip_clock

  1. 自动重载提醒时间点设置、临时显示时间设置
  2. 增加README.md中的同个时间点多次提醒的说明
  3. 托盘菜单文字消歧义
  4. 修复配置覆写
  5. 改进透明度窗口输入体验
  6. debug版本改进日志输出体验