想让你多爱自己一些的开源计时器

我用过 Pomotroid、Reminders MenuBar、Timer 等众多优秀、开源的番茄时钟和计时工具,它们帮我更高效地管理时间,让我更专注地投入工作。

但有一个问题始终困扰着我:每当计时结束时,我总是习惯性地忽略休息提醒,继续沉浸在手头的事情中,直到第二天身体不适才追悔莫及

最近,我发现了一款特别贴心的开源计时工具------Catime。它体积小巧、设计简洁,最大的亮点是支持自定义计时结束后的动作,比如锁定屏幕强制休息。当然,你也可以设置到点自动关机,但这有些太狠了😅。

GitHub 地址:github.com/vladelaina/Catime

我非常喜欢 Catime,因为它总是在提醒我"停下来",对自己好一点。这种温暖的感觉让我想起我的老妈:别人关心你飞得高不高,而妈妈只在意你累不累

在与项目作者 vladelaina 聊完 Catime 背后的故事后,我更加确信这是一个充满爱的开源项目。让我们一起走进这个「希望你多爱自己一点」的暖心计时器------Catime。

一、介绍

Catime 是一款轻巧易用的 Windows 计时工具,集时钟、倒计时和番茄时钟于一体,支持透明界面和丰富的自定义选项,让你的时间管理更简单、更高效。

特点

  • 极简设计:界面透明、点击穿透、任意拖拽缩放、无复杂设置,使用起来轻松无负担。
  • 灵活计时:支持快速预设、自定义时间输入,提供当前时间、倒计时、正计时和番茄时钟多种模式。
  • 超时动作:计时结束后可自动执行锁屏、打开文件/软件、访问指定网站、关机或重启等操作。
  • 丰富自定义:内置 47 种字体和 15 种预设颜色,支持自定义颜色值及调色板选色,实时预览效果,满足个性化需求。

操作方式简单便捷,所有配置均可通过托盘图标点击完成:左键点击快速管理时间,右键点击设置选项,一目了然。

二、来自用户的爱

Catime 拥有如此丰富的功能,并非一蹴而就。

最初,作者只是想找到一种方式,来对抗自己"停不下来"的工作节奏,提醒自己定时离开电脑,稍作休息,以实现工作和健康的平衡。(🤨我怀疑,他的灵感可能来自一次游戏后的反思)

因此,Catime 最早的设计非常简单:倒计时结束后自动锁屏

这个小小的功能却带来了意想不到的效果:当屏幕突然变黑、需要重新输入密码时,用户会自然而然地停下来思考------是不是该趁这机会站起来活动一下?这种温和的"强制中断",既不会引起反感,又有效地打破了持续工作的惯性。

原本以为软件做到这里就足够了。然而,随着项目开源和第一个演示视频的发布,Catime 意外地收获了大量用户的奇思妙想、建设性反馈和热情的支持。

在接下来的四个月中,作者不断吸收反馈、持续迭代优化,最终将 Catime 打造成了能够满足多种场景需求的计时工具。

2.1 工作场景

距离下班还有多久?

只需简单输入下班时间即可快速开启倒计时。例如,18:00 下班,只要输入 18t 后回车,Catime 就会实时显示距离下班还有多久。

不仅如此,你还可以将超时后的动作设置为正计时模式,让时间到达后自动切换为加班计时,直观记录加班时长。

PPT 演示计时

适用于汇报、演讲或会议限时等场景,帮助你精准掌控时间,还不会干扰演示画面。

2.2 娱乐场景

游戏时间管理

全屏游戏时无需频繁切换窗口,即可随时掌握当前时间,避免"玩过头"。

  • 游戏时长统计:正计时模式实时记录游戏持续时间,帮助你合理掌控游戏时间。
  • 休息提醒:自定义游戏时长,到点自动提醒,防止沉迷。
  • 超时强制措施:甚至可以设置超时后自动关机,实现真正的"强制下线"。

定时访问网站

设置定时打开指定网站,避免遗忘错过重要时刻,比如 每月 28 日准时打开 HelloGitHub 网站了解最新开源动态。

  • 发布会提醒:活动开始前自动跳转到发布页面,不错过任何精彩瞬间。
  • 直播提醒:关注的直播 19:30 开始?到点自动打开直播页面,无需手动操作。

三、对技术的热爱

Catime 的作者目前才刚上大二,只会 C 语言。他凭借对技术的热爱,用尽所学知识想把 Catime 做好。

他选择基于 Windows API(Win32)和 C 语言开发 Catime,其核心是一个无边框透明窗口,能够灵活显示倒计时、正计时或当前时间。他精心设计了底层实现,既确保了轻量级的特性,又提供了丰富的视觉效果和良好的交互体验。

3.1 窗口创建与样式

c 复制代码
// 创建特殊样式的无边框窗口
HWND hwnd = CreateWindowEx(
    WS_EX_LAYERED | WS_EX_TOOLWINDOW,  // 扩展样式:分层窗口+工具窗口
    "CatimeWindow", "Catime",
    WS_POPUP,  // 弹出窗口样式(无边框)
    CLOCK_WINDOW_POS_X, CLOCK_WINDOW_POS_Y,
    CLOCK_BASE_WINDOW_WIDTH, CLOCK_BASE_WINDOW_HEIGHT,
    NULL, NULL, hInstance, NULL
);

3.2 窗口置顶

c 复制代码
void SetWindowTopmost(HWND hwnd, BOOL topmost) {
    CLOCK_WINDOW_TOPMOST = topmost; 
    // 获取当前窗口样式
    LONG exStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
    
    if (topmost) {
        // 置顶模式处理
        exStyle &= ~WS_EX_NOACTIVATE; 
        SetParent(hwnd, NULL);   
        SetWindowLongPtr(hwnd, GWLP_HWNDPARENT, 0);
        SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0,
                    SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_FRAMECHANGED);
    } else {
        // 非置顶模式处理
        exStyle |= WS_EX_NOACTIVATE;
        // ... 查找桌面窗口的代码 ...
        if (hDesktop != NULL) {
            SetParent(hwnd, hDesktop);
        } else {
            SetWindowPos(hwnd, HWND_BOTTOM, 0, 0, 0, 0,
                        SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
        }
    }  
    
    // 应用新窗口样式并更新
    SetWindowLong(hwnd, GWL_EXSTYLE, exStyle);
    SetWindowPos(hwnd, NULL, 0, 0, 0, 0,
                SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);  
    WriteConfigTopmost(topmost ? "TRUE" : "FALSE");
}

3.3 系统托盘集成

c 复制代码
void InitTrayIcon(HWND hwnd, HINSTANCE hInstance) {
    // 创建托盘图标数据结构
    NOTIFYICONDATA nid = {0};
    nid.cbSize = sizeof(NOTIFYICONDATA);
    nid.hWnd = hwnd;
    nid.uID = TRAY_ICON_ID;
    nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    nid.uCallbackMessage = CLOCK_WM_TRAYICON;  // 自定义消息
    nid.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
    strcpy(nid.szTip, "Catime");
    
    // 添加图标到系统托盘
    Shell_NotifyIcon(NIM_ADD, &nid);
}

所有代码均已开源,篇幅有限,这里仅展示核心代码片段。

四、来自陌生人的温暖

Catime 作者(vladelaina)是一名普通的大二学生,因为热爱开源,他牺牲了玩耍的时间开发 Catime 开源计时器,并为此倾注了全部热爱。

我相信充满爱的开源项目,一定会被更多人所喜爱。果不其然,Catime 收获了许多来自陌生人的关注和支持,帮助它取得了如今的成就(900+ Star、21 位贡献者)。

  • 特别感谢果核剥壳、it学无止境、HelloGitHub、玄离199、_不言不厌、小众软件等大佬的推荐。
  • 同时感谢为 Catime 提供精美 Logo 的画师:猫屋敷梨梨Official。

五、回到梦开始的地方

感谢你耐心读到这里,在结束前,我想分享一句 Catime 作者 vladelaina 特别喜欢的话,出自于李笑来的《斯坦福大学创业成长课》:

如果你想要的东西还不存在,那就亲自动手将它创造出来。

最初,vladelaina 非常喜欢一款名为 Easy-Cat-Timer(C#)的开源软件,但遗憾的是它已经 6 年未更新。于是他决定用开源的方式延续这个项目的生命。vladelaina 不止一次大方地承认,Catime 最初的设计灵感正是源于对 Easy-Cat-Timer 的魔改,这也是 Catime 名字的由来,以此向原作者絮酱酱致敬!他再三向我强调,Easy-Cat-Timer 是他梦开始的地方!

GitHub 地址:github.com/xujiangjiang/Easy-Cat-Timer

也是因为 Catime 计时器,vladelaina 有幸与絮酱酱建立了联系。絮酱酱是一个非常坚强的女孩子,让我们一起祝福她早日康复!

最后,在与 vladelaina 的沟通中,我真切地感受到他对开源那份纯粹的热爱,这正是 HelloGitHub 一直在寻找的「有温度、有故事的开源项目」。也正是因为这份热爱,Catime 一路走来,才会有无数素未谋面的人用爱为它充值。这一切都是意料之中的,因为 Catime 生于热爱,也在传递爱!

GitHub 地址:github.com/vladelaina/Catime

HelloGitHub 不仅分享有趣的开源项目,也希望挖掘开源背后的热情与故事。我们期待通过代码与文字,凝聚一群纯粹、有爱的小伙伴,共同打造一个有趣、有温度的开源社区!