【求助】针对活动窗口的软件显示“倒计时”的小工具

需求用途描述:
开电脑干活,总是会分心开浏览器看网页、玩哥本地小游戏、或在其他软件里磨磨蹭蹭,导致浪费很多时间。希望能有一个工具,能针对活动窗口的软件,自动显示一个倒计时(倒计时可自己设置倒计多少时间),如果还能有倒计时完毕后强制休息n分钟的功能更好(休息功能不重要)。
注:是针对活动窗口,不时针对整体的倒计时。

需求原因:
本人对倒计时有莫名的紧迫感(可能是做稿子养成的deadline习惯),看着倒计时会时刻提醒自己在某个东西上用了多少时间,就会及时关掉他们回到正常的工作上做稿子。

衍生阅读:
手机安卓上已有同类软件在使用,自己已经设计好每个app的倒计时,只要打开就会显示倒计时,这样自己每当打开微博刷个几分钟就会自动关掉不会出沉迷其中。但是电脑端上一直没找到该类软件,只找到:
1.正向计时工具,
2.番茄闹钟工作法,
3.ManicTime Pro记录软件使用时间
这几类软件,还是不符合要求。

希望知道大家能提供一个思路,个人觉得ahk应该能办到,奈何学不会,感谢大家阅读~~

莫名想起棋类比赛的那个表。。。

我帮你写了一个

#Persistent
global if_start := 0

gui timer: New , , QQ_timer
gui timer: Color, EEAA99
gui timer: Font, s9 cRed Bold, Segoe UI
gui timer: Add, Edit, vMyEdit gstart w70 h18 -Wrap, %TempNote%
gui timer: -Caption +AlwaysOnTop
gui timer: Show
WinSet, TransColor, EEAA99 180, QQ_timer

SetTimer, timekiller, 1000
return

timekiller:
{
	if(if_start = 1)
	{
		time_array := StrSplit(MyEdit, ":")
		shi:=time_array[1]
		fen:=time_array[2]
		miao:=time_array[3]
		
		MouseGetPos, , , curWin, 
		WinExist("ahk_id " curWin)
		WinGetPos, wX, wY, wW, 
		xx:=wX + wW - 200
		Gui timer: Show , NA x%xx% y%wY%
		
		ifWinActive, ahk_exe neon.exe
;修改此处的neon.exe 为你需要的
		{
			if (shi=0)
				yushi:=0
			if (yushi=0 and fen=0)
				yufen:=0
			
			if (miao != 0)
				miao := miao - 1
			else if (yufen != 0)
			{
				miao:=59
				if (fen != 0)
					fen:= fen-1
				else if (yushi != 0)
				{
					fen:=59	
					if (shi != 0)
						shi:=shi-1
				}
			}
		}
		
		Newtime = %shi%:%fen%:%miao%
		if (shi=0 and fen=0 and miao=0)
		{
			run mshta vbscript:createobject("sapi.spvoice").speak("你的道计时结束了,还没完成任务吗?那你可真够垃圾!下次高效点")(window.close)
;倒计时结束后,通过语音提醒,修改上面的汉字可以修改提示词
			ExitApp
		}
		GuiControl, timer: Text, MyEdit ,%Newtime%
		gui timer: Submit, NoHide
	}
}
return

start:
	if(if_start = 0)
	{
	gui timer: Submit, NoHide
	if (StrLen(MyEdit) = 8)
	{
	if_start:=1
	}
	}
return
2 个赞

打开后,会有一个小框

按照 时:分:秒 的格式,输入数字,软件便自动开始了
|
|

image
|
|
这个时钟会在每个软件的窗口三大键附近显示
但是只有当你在用目标窗口时,才会进行倒计时
|
|


|
|

GIF
|
|
image
修改此处的neon.exe为你自己的目标软件即可
|
|
倒计时结束后,会通过自己定制的语音进行提醒
修改这段汉字,可以更改提醒语
|
image

1 个赞

好用的话,别忘了点个解决方案啊!
0094B3CF
exe版本的稍后放上来~

3 个赞

非常感谢dog朋友的热心帮助!

这里有几个问题想请教一下:
20220507_212426

1.倒计时完毕后弹出报错窗口;(这个问题不重要)

2.如果设置多个软件要倒计时,是要编辑多个ahk文件,同时打开?

3.倒计时的窗口大小能自定义大小吗?目前的这个好小,我完全没去注意……我自己想按照需要随意放在屏幕任意地方,窗口大小也随意放。实在不行就放在左下角就好(我任务栏在右手边)。

注:我目前手机app用的是这样一个提醒,(虽然有时候会挡住按钮),在顶部很大,超级显眼,让自己随时注意娱乐时间不要超时。如果按照朋友你的脚本,那个时间框好小我完全没注意到 :joy: :joy:

总之很谢谢你的热心帮助哈~感谢~

这个,是不是你把

run mshta vbscript:createobject("sapi.spvoice").speak("你的道计时结束了,还没完成任务吗?那你可真够垃圾!下次高效点")(window.close)
			ExitApp

的ExitApp,这个指令丢了,没有这个exitapp会死循环的。

不用,可以设定哪些窗口需要倒计时,多加几个语句就可以。

什么都能自定义,大小字体样式位置背景图透明度…
但是得会点ahk

我刚发现我理解你的需求产生了偏差。。。

你是想要那种在非工作页面显示的倒计时。。。用来让自己不要多玩。。。

我理解成了工作页面的倒计时,所以做了个小的,因为这样比较不会破坏心流~

对的,我工作的时候经常会分心搞别的事情去,所以想反向在工作以外的软件上强行弹出倒计时提醒自己不要沉迷娱乐软件上 :joy:

.
.

问题1那个 exitapp ,我看了是有复制进去的~
20220508_095504

很感谢朋友你热心帮助哈~

百度了一下你的那个错误代码

image

求exe

真诚倒计时(worktime clock)——一个只在工作窗口走字的倒计时器 - 讨论分享 - 小众软件官方论坛 (appinn.net)

那个代码问题其实不重要哈,毕竟只是提醒,点一下就好。另外朋友你写的ahk代码是符合我需求的哈,只是不知道能不能协助微调一个东西:把倒计时窗口调大放到左下角? 这样我配合另一个软件其实也能达到我的需求~~

感谢~

#Persistent
global if_start := 0
SetBatchLines, -1
FileDelete, dog.txt
;如果需要维持上一次设定的窗口,把上面这行删掉
yourwords := "你设定的道计时结束了,你设定的道计时结束了,你设定的道计时结束了!"

gui timer: New , , QQ_timer
gui timer: Color, EEAA99
gui timer: Font, s40 cRed Bold, Segoe UI
;上面的s20是字体大小,Segoe UI是字体名称
gui timer: Add, Edit, vMyEdit gstart w270 h90 -Wrap, %TempNote%
;上面的w350 h90 是计时器窗口宽和高,自己改改大小
		xx:= A_ScreenWidth - 270
		;用屏幕宽度减去设定的计时器宽度
		yy:= A_ScreenHeight - 90
		;用屏幕高度减去设定的计时器高度
gui timer: -Caption +AlwaysOnTop
gui timer: Show
WinSet, TransColor, EEAA99 100, QQ_timer
;上面的100是透明度,最小0全透明,最大255不透明

SetTimer, timekiller, 1000
return

timekiller:
{
	if(if_start = 1)
	{
		time_array := StrSplit(MyEdit, ":")
		shi:=time_array[1]
		fen:=time_array[2]
		miao:=time_array[3]
		
		MouseGetPos, , , curWin, 
		WinExist("ahk_id " curWin)
		Gui timer: Show , NA x%xx% y%yy%
		
		Loop, read, dog.txt
	{
    if (curWin = A_LoopReadLine)
    {
    is_act := 1
    }
	}
		if (is_act = 1)
		{
			if (shi=0)
				yushi:=0
			if (yushi=0 and fen=0)
				yufen:=0
			
			if (miao != 0)
				miao := miao - 1
			else if (yufen != 0)
			{
				miao:=59
				if (fen != 0)
					fen:= fen-1
				else if (yushi != 0)
				{
					fen:=59	
					if (shi != 0)
						shi:=shi-1
				}
			}
		}
		
		Newtime = %shi%:%fen%:%miao%
		if (shi=0 and fen=0 and miao=0)
		{
			run mshta vbscript:createobject("sapi.spvoice").speak("%yourwords%")(window.close)
			ExitApp
		}
		GuiControl, timer: Text, MyEdit ,%Newtime%
		gui timer: Submit, NoHide
		
		is_act := 0
	}
}
return

start:
	if(if_start = 0)
	{
	gui timer: Submit, NoHide
	if (StrLen(MyEdit) = 8)
	{
	if_start:=1
	}
	}
return

^F1::
MouseGetPos, , , msWin, 
FileAppend, %msWin%`n, dog.txt
return

^F2::
InputBox, yourwords , "请输入您的自定义提示语", , , 700, 120
return

感谢朋友的热心帮助~今晚下班我回去试试

“手机安卓上已有同类软件在使用”
我有个朋友想问软件名。

有挺多的,远离手机 ,20秒护眼 ,小米系统自带也有限制app使用时间