【开源自荐】久坐提醒(AHK) 更新V2

小弟受惠于小众…所以也发于小众
小弟为了各位大佬的健康不要久坐
所以弄了个小AHK各位大佬…试试

说明:
1.可自行修改时间
2.可自行暂停.停止
3.字形.字体大小皆可修改
4.音效档及EXE档皆上传云端可自行下载
5.不再更新啦…小弟功力有限

#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
#Persistent

; ************************************************************
;  久坐提醒&走动提醒 - 倒数窗口可拖曳 + 自动置中 + 等待「确定」才进行下一阶段
;  (AHK v1)
; ************************************************************

;==== 初始工作 / 休息时间 (分钟) ===============================
SitInterval  := 30
WalkInterval := 8
AudioFile    := "D:\QQ.wav"   ; 可换成你实际的绝对路径
;=============================================================

; 当前模式 ("Sit" 或 "Walk") / 倒数计时剩余秒数
currentMode   := "Sit"
timeLeft      := SitInterval * 60
timerRunning  := false        ; 一开始为停止状态

; ------------------------------------------------------------
; 「倒数窗口」(GUI2) &「提醒窗口」(GUI3) 外观
; ------------------------------------------------------------
CountFontSize  := 24            ; 倒数字体大小(缺省 24)
CountFontColor := "Red"         ; 倒数字体颜色(缺省 红色)
CountTransLvl  := 230           ; 倒数窗口透明度 (1~255)

RemindFontSize  := 30           ; 提醒文本大小(缺省 30)
RemindFontColor := "Blue"       ; 提醒文本颜色(缺省 蓝色)

; ------------------------------------------------------------
; 创建「主设置窗口」(GUI1)
; ------------------------------------------------------------
Gui, +AlwaysOnTop +ToolWindow

; 1) 模式
Gui, Font, s18, GenSenRounded JP
Gui, Add, Text, x10  y10  w220 h30 vModeText, 模式:工作

; 2) 剩余时间
Gui, Font, s20, GenSenRounded JP
Gui, Add, Text, x10  y50  w220 h30 vCountdownText, 剩余时间:%SitInterval%:00

; 3) 三个按钮 (开始、暂停、停止)
Gui, Font, s14, GenSenRounded JP
Gui, Add, Button, x10   y90  w60 h30 gStart, 开始
Gui, Add, Button, x80   y90  w60 h30 gPause, 暂停
Gui, Add, Button, x150  y90  w60 h30 gStop,  停止

; 4) 「设置计时」区块
Gui, Add, GroupBox, x10  y130 w230 h90, 设置计时
Gui, Add, Button, x180 y130 w60 h25 gApplyTimes, 套用

; (a) 工作(坐)时间
Gui, Font, s12
Gui, Add, Text, x20  y165 w120 h25, 工作(坐)时间:
Gui, Add, Edit, x150 y162 w40 +Right vEditSitInterval, %SitInterval%
Gui, Add, Text, x200 y165, 分

; (b) 休息(走动)时间
Gui, Add, Text, x20  y193 w120 h25, 休息(走动)时间:
Gui, Add, Edit, x150 y190 w40 +Right vEditWalkInterval, %WalkInterval%
Gui, Add, Text, x200 y193, 分

; ------------------------------------------------------------
; 「外观设置」区块:可调整「倒数窗口」(GUI2) &「提醒窗口」(GUI3)字体大小、颜色、透明度
; ------------------------------------------------------------
Gui, Add, GroupBox, x10 y230 w230 h160, 外观设置

; -- 倒数窗口
Gui, Add, Text, x20  y250, 倒数字体大小:
Gui, Add, Edit, x120 y247 w30 vCountFontSizeEdit, %CountFontSize%
Gui, Add, Text, x20  y280, 倒数字体颜色:
Gui, Add, Edit, x120 y277 w50 vCountFontColorEdit, %CountFontColor%
Gui, Add, Text, x20  y310, 窗口透明度:
Gui, Add, Slider, x120 y305 w80 vCountTransSlider Range1-255 AltSubmit, %CountTransLvl%

; -- 提醒窗口
Gui, Add, Text, x20  y340, 提醒字体大小:
Gui, Add, Edit, x120 y337 w30 vRemindFontSizeEdit, %RemindFontSize%
Gui, Add, Text, x20  y370, 提醒字体颜色:
Gui, Add, Edit, x120 y367 w50 vRemindFontColorEdit, %RemindFontColor%

; -- 按钮:套用外观
Gui, Add, Button, x160 y225 w80 h30 gApplyAppearance, 外观套用

; 显示主窗口 (GUI1)
Gui, Show, w260 h440, 久坐提醒 (主窗口)

; ------------------------------------------------------------
; 创建「倒数窗口」(GUI2)
; ------------------------------------------------------------
; +Caption  => 显示标题列,可鼠标拖动
; -MinimizeBox / -MaximizeBox => 移除最小化 / 最大化按钮
Gui, 2:+AlwaysOnTop +ToolWindow +Caption -MinimizeBox -MaximizeBox
Gui, 2:Font, s%CountFontSize% c%CountFontColor%, GenSenRounded JP

; 让文本占满窗口 + 置中
Gui, 2:Add, Text, x0 y0 w240 h70 +Center +0x200 vCountDownOnlyText, --:--

; 初始不显示,等按「开始」后才 Show
; ------------------------------------------------------------
; 每秒更新倒数
; ------------------------------------------------------------
SetTimer, UpdateTimer, 1000
return

; ------------------------------------------------------------
; [UpdateTimer]:每秒更新倒数
; ------------------------------------------------------------
UpdateTimer:
if (timerRunning)
{
    timeLeft -= 1
    if (timeLeft <= 0)
    {
        PlayReminderSound()
        ; 先暂停计时,弹出提醒窗口
        timerRunning := false

        if (currentMode = "Sit")
        {
            ShowReminder("久坐提醒", "您已经连续坐了 " . SitInterval . " 分钟,起来活动一下吧!")
        }
        else
        {
            ShowReminder("走动提醒", "您已经走动了 " . WalkInterval . " 分钟,可以回到工作啰!")
        }
    }
    else
    {
        ; 正常倒数时,更新画面
        ShowCountdown()
    }
}
return

; ------------------------------------------------------------
; [ShowCountdown]:更新主窗口 & 倒数窗口的剩余时间文本
; ------------------------------------------------------------
ShowCountdown()
{
    global timeLeft, currentMode

    min := Floor(timeLeft / 60)
    sec := Mod(timeLeft, 60)
    countdown := Format("{:02}:{:02}", min, sec)

    GuiControl,, CountdownText, % "剩余时间:" . countdown
    GuiControl,, ModeText,       % "模式:" . (currentMode = "Sit" ? "工作" : "走动")

    GuiControl, 2:, CountDownOnlyText, % countdown

    Menu, Tray, Tip, % "模式:" . (currentMode="Sit" ? "工作 " : "走动 ") . countdown
}

; ------------------------------------------------------------
; [Start]: 开始 → timerRunning = true, 并显示「倒数窗口」
; ------------------------------------------------------------
Start:
timerRunning := true

; 主窗口推到底层
WinSet, Bottom,, A

; 显示倒数窗口
Gui, 2:Show, x400 y200 w240 h70, 倒数窗口
WinSet, Transparent, %CountTransLvl%, 倒数窗口

ShowCountdown()  ; 立即更新显示
return

; ------------------------------------------------------------
; [Pause]: 暂停 / 继续 (切换)
; ------------------------------------------------------------
Pause:
timerRunning := !timerRunning
return

; ------------------------------------------------------------
; [Stop]: 停止并重置
; ------------------------------------------------------------
Stop:
timerRunning := false
currentMode := "Sit"
timeLeft := SitInterval * 60

GuiControl,, ModeText, 模式:工作
GuiControl,, CountdownText, 剩余时间:%SitInterval%:00
Menu, Tray, Tip, 久坐提醒

Gui, 2:Hide
return

; ------------------------------------------------------------
; [ApplyTimes]: 套用工作 / 休息时间
; ------------------------------------------------------------
ApplyTimes:
Gui, Submit, NoHide

if (EditSitInterval < 1)
    EditSitInterval := 1
if (EditWalkInterval < 1)
    EditWalkInterval := 1

SitInterval  := EditSitInterval
WalkInterval := EditWalkInterval
currentMode  := "Sit"
timeLeft     := SitInterval * 60
timerRunning := false

GuiControl,, ModeText, 模式:工作
GuiControl,, CountdownText, 剩余时间:%SitInterval%:00
Menu, Tray, Tip, 久坐提醒

MsgBox, 262208, 更新完成, 工作(坐)时间:%SitInterval% 分钟`n休息(走动)时间:%WalkInterval% 分钟
return

; ------------------------------------------------------------
; [ApplyAppearance]: 套用外观设置
; ------------------------------------------------------------
ApplyAppearance:
Gui, Submit, NoHide

; 倒数窗口
if (CountFontSizeEdit < 8)
    CountFontSizeEdit := 8
CountFontSize := CountFontSizeEdit

CountFontColor := CountFontColorEdit
CountTransLvl  := CountTransSlider

Gui, 2:Font, s%CountFontSize% c%CountFontColor%
GuiControl, 2: Font, CountDownOnlyText
WinSet, Transparent, %CountTransLvl%, 倒数窗口

; 提醒窗口
if (RemindFontSizeEdit < 8)
    RemindFontSizeEdit := 8
RemindFontSize  := RemindFontSizeEdit
RemindFontColor := RemindFontColorEdit

MsgBox, 262208, 外观更新, 已套用新的外观设置!
return

; ------------------------------------------------------------
; [ShowReminder]: 弹出提醒窗口(自动调整大小、按下「确定」才进入下个模式)
; ------------------------------------------------------------
ShowReminder(Title, Msg) {
    global

    Gui, 3:Destroy
    Gui, 3:+AlwaysOnTop +ToolWindow +Caption -MinimizeBox -MaximizeBox
    Gui, 3:Font, s%RemindFontSize% c%RemindFontColor% Bold
    Gui, 3:Margin, 20, 20

    Gui, 3:Add, Text, xm ym +Center +0x200 vReminderText, %Msg%
    
    ; 改成 xm (或 x20) 放左边
    Gui, 3:Add, Button, x+30 y+20 w100 h40 gCloseReminder, 确定

    Gui, 3:Show, AutoSize Center, %Title%
}

; ------------------------------------------------------------
; [CloseReminder]: 用户按下「确定」→ 切换下一模式并重启计时
; ------------------------------------------------------------
CloseReminder:
global currentMode, SitInterval, WalkInterval, timeLeft, timerRunning

; 根据当前模式,切换至对应的下一模式并设置新倒数时间
if (currentMode = "Sit")
{
    currentMode := "Walk"
    timeLeft := WalkInterval * 60
}
else
{
    currentMode := "Sit"
    timeLeft := SitInterval * 60
}

; 窗口关闭,重启计时
Gui, 3:Destroy
timerRunning := true

; 即刻更新倒数文本
ShowCountdown()
return

; ------------------------------------------------------------
; [PlayReminderSound]: 播放提示音档
; ------------------------------------------------------------
PlayReminderSound()
{
    global AudioFile
    if FileExist(AudioFile)
        SoundPlay, %AudioFile%
    else
        SoundBeep, 750, 300
}

; ------------------------------------------------------------
; [GuiClose]: 关闭主窗口 → 结束程序
; ------------------------------------------------------------
GuiClose:
ExitApp




「久坐提醒 -小众…zip」来自UC网盘分享

密码:3RmD

链接: https://pan.baidu.com/s/1K-Ced7DJpVDvjMm-HHyKxA?pwd=eipv 提取码: eipv 复制这段内容后打开百度网盘手机App,操作更方便哦
–来自百度网盘超级会员v8的分享

我用夸克网盘分享了「久坐提醒 -小众…zip」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
链接:夸克网盘分享
提取码:qqjR

https://115cdn.com/s/swhgond3zjr?password=a5b3&#
久坐提醒 -小众…zip
访问码:a5b3

7 Likes

是否可以把提醒换一个漂亮点的样式?

1 Like

自荐一下,应该不会冒犯帖主吧?11年前的项目。

2 Likes

不会啦…大家一起学习…有更好的当然更好… :+1:

蛙大…小弟功力…有限…这样就花很多时间修改了… :sob:

慢慢美化,我们等你[嘿嘿,我发不了表情]

1 Like

我前两天刚写了一个类似的,番茄时钟倒计时

1 Like

楼主的代码格式真是优雅至极,很好奇那些分割线是怎么去敲出来的,有什么好的办法吗。

1 Like

copyQ很简单的

这个我有使用…但还要安装TrafficMonitor我就觉得麻烦了

都开源给你们了…我功力有限阿…而且…我觉得…这我很够用了…不更新了… :rofl:

1 Like

应该啥都不依赖, sxzxs/pomodoro-timer

1 Like

大佬小弟刚刚试了您的…出现了…错误视窗…是怎么了吗

喔…找到原因了…因为…lib没有下载… :rofl:…抱歉大佬小弟白痴了…

菜鸟图库-央视新闻联播.mp3

太棒了… :laughing:

但有一点…设置目标…是什么功能…还有…怎么不循环…还是…我真的太白痴不会操作… :joy:

倒计时,显示剩余时间和任务,时间到了播放音乐。
其他就没有了。。

1 Like

音乐…实在是…选的真好… :rofl:

大佬刚刚有空试了您的…真的…我…搞不清…闪一下…就没了…我还是看一下AHK在做什么好了… :grin:

  • 当空闲时间大于45秒时,判定用户进入休息状态,健康时间开始回复
  • 当健康时间小于0秒时,屏幕将会逐渐变暗,并会在屏幕角落给出提示
  • 当健康时间小于-1800秒时,每分钟主板蜂鸣器将会报警

参数在脚本头部更改即可。没有界面,按自己习惯配置一次就可以了。

1 Like

现在用的是这个,可以参考下

2 Likes

压缩包有密码 无法解压

1 Like

抱歉…忘了打
解压PW:小众_ot1686