标题: [问题求助] vbs实现闹钟及计时器 [打印本页]
作者: FOR 时间: 2012-11-18 15:43 标题: vbs实现闹钟及计时器
本帖最后由 pcl_test 于 2016-9-3 13:37 编辑
vbs闹钟
求一vbs闹钟
功能如下
1、运行后弹出对话框,输入闹钟时间和提示信息。
2、输入时间最好分为两种,一种是直接输入闹钟时间,另一种是输入等待时间,最好是用一个前缀符号来表示
比如输入 1308 表示13点08分 启动闹钟
输入 #0105 表示一个小时零5分钟后 启动闹钟
3、闹钟启动后,显示提示信息,并带有提示音
4、窗口显示15秒,按“确定”关闭,按“否”或不理会窗口则自动隐藏窗口并在1分钟后继续提醒,10次后自动关闭不再提醒。
作者: tmplinshi 时间: 2012-11-19 21:08
本帖最后由 tmplinshi 于 2012-11-20 00:29 编辑
- UsageText = "输入格式为:" _
- & VbCrLf _
- & VbCrLf & VBTab & "HHMM - 等待 HH:MM" _
- & VbCrLf & VBTab & "@HHMM - 直到 HH:MM"
-
- Input = InputBox(UsageText)
- If Input = "" Then WScript.Quit
-
- If Mid(Input, 1, 1) = "@" Then
- time1 = ((Hour(Now) * 60 + Minute(Now)) * 60 + Second(Now)) * 1000
- time2 = (Mid(Input, 2, 2) * 60 + Mid(Input, 4, 2)) * 60 * 1000
- n = time2 - time1
- Else
- n = (Mid(Input, 1, 2) * 60 + Mid(Input, 3, 2)) * 60 * 1000
- End If
-
- WScript.Sleep(n)
-
- Set wshShell = WScript.CreateObject("WScript.Shell")
-
- Do
- btn = WshShell.Popup("时间到了!是否停止闹钟?", 15, "闹钟提示", &H4 + &H20)
- If (btn = 6 Or SkipCount = 10) Then WScript.Quit
-
- SkipCount = SkipCount + 1
- WScript.Sleep(1 * 60 * 1000)
- Loop
复制代码
作者: FOR 时间: 2012-11-20 00:36
谢版主回复,请问 WScript.Sleep 延时准确吗?比如我想延时 2个小时,误差有多大?
自己看教程写了个把时间拆开成数字再循环获取当前时间,用 if 对比,虽能达到目的,可cup占用太厉害了。。
还有 WScript.Sleep 延时 1分钟 是多少? WScript.Sleep (6000) 吗?
作者: tmplinshi 时间: 2012-11-20 02:02
回复 3# FOR
请问 WScript.Sleep 延时准确吗?比如我想延时 2个小时,误差有多大?
不清楚。
还有 WScript.Sleep 延时 1分钟 是多少? WScript.Sleep (6000) 吗?
1分钟 × 60秒 × 1000毫秒,即 WScript.Sleep (1 * 60 * 1000),即 WScript.Sleep (60000)。
作者: FOR 时间: 2012-11-20 02:28
谢谢,再次感谢,代码已基本能看懂了
作者: Heykuz 时间: 2012-11-20 07:02
好强大。。。。。。
作者: FOR 时间: 2012-11-20 19:21
::一晚没睡,看教程,百度。。。写了改改了写总算写出自己满意的闹钟了。。再次感谢各位给我的帮助
::vbs 的wscript.sleep延时还真准,我测试2个小时分秒不差。- Dim ws,a,a1,b1,b2,c1,c2,var,t,ts
- set ws=createobject("wscript.shell")
- t=time
- t1=int(timer)
- a=inputbox("输入等待时间(分钟)"&Chr(13)&Chr(13)&_
- "如 78 表示1小时零18分钟后启动闹钟","闹钟","5"_
- )
- if a=false then Wscript.Quit '判断若点了关闭按钮则退出
- ts=inputbox("输入提示信息","提示","提示")
- if a=false then Wscript.Quit '判断若点了关闭按钮则退出
- a1=int(a*60) '将分钟换算成秒
- c1=int(a/60) '将输入的分钟转换为小时
- c2=int(a mod 60) '转换后剩余的分钟
- '计算当前时间加上输入分钟的时间
- b2=(c2+minute(t)) mod 60
- if c2+minute(t)>=60 then c1=c1+1
- b1=c1+hour(t) 'b1、b2供显示用
- b2="0"&b2 'b1、b2供显示用
- b2=right(b2,2) 'b1、b2供显示用
- msgbox "启动时间 "&b1&":"&b2
-
- t2=int(a1-(timer-t1))
- wscript.sleep 1000*t2 '1000 为 1秒
- var=c1 & " 小时零 " & c2 &" 分钟"
-
- set ws=WScript.CreateObject("WScript.Shell")
- For i = 1 to 3 step 1
- ws.run "cmd /c @echo ",0,true
- f=ws.popup ("输入的时间 "&var&chr(13)&_
- "换算成 "&a1&" 秒"&chr(13)&_
- "起始时间 "&t&chr(13)&_
- "结束时间 "&time&chr(13)&_
- "正确启动时间 "&b1&":"&b2,15,"时间到 "&ts,4+32) '将15改成0为不自动关闭
- If (f = 6 ) Then Wscript.Quit
- wscript.sleep 1000*10
- Next
复制代码
作者: Demon 时间: 2012-11-22 13:35
tmplinshi 发表于 2012-11-19 21:08
时间计算有专门的函数
作者: tmplinshi 时间: 2012-11-22 13:50
时间计算有专门的函数
Demon 发表于 2012-11-22 13:35
哦。谢谢指点。
我没有仔细的学过 VBS,从我的代码上也看得出,我没有用 Dim。二楼的代码我都是借着 Google 和《Windows 脚本技术》写出来的。
作者: Demon 时间: 2012-11-22 13:53
哦。谢谢指点。
我没有仔细的学过 VBS,从我的代码上也看得出,我没有用 Dim。二楼的代码我都是借 ...
tmplinshi 发表于 2012-11-22 13:50
小脚本一般不用Dim,二楼的代码已经写得很好了。
作者: xswl 时间: 2022-12-3 17:40
本帖最后由 xswl 于 2022-12-3 17:45 编辑
我给2楼的代码加上了语音文字提醒(重复4次时间到了,可修改),没有理会提醒弹窗后续再次提醒也有语音(时间到了,已超时)- msgbox"点确定开始使用,时间到了有提示音,按“确定”关闭,按“否”或不理会窗口则自动隐藏窗口并在1分钟后继续提醒,10次后自动关闭不再提醒。"
-
- UsageText = "输入格式为:" _
- & VbCrLf _
- & VbCrLf & VBTab & "xxyy - 等待 xx:yy 后提醒" _
- & VbCrLf & VBTab & "@xxyy - 直到 xx:yy 提醒"
-
- Input = InputBox(UsageText)
- If Input = "" Then WScript.Quit
-
- If Mid(Input, 1, 1) = "@" Then
- time1 = ((Hour(Now) * 60 + Minute(Now)) * 60 + Second(Now)) * 1000
- time2 = (Mid(Input, 2, 2) * 60 + Mid(Input, 4, 2)) * 60 * 1000
- n = time2 - time1
- Else
- n = (Mid(Input, 1, 2) * 60 + Mid(Input, 3, 2)) * 60 * 1000
- End If
-
- WScript.Sleep(n)
-
- Set wshShell = WScript.CreateObject("WScript.Shell")
-
- set objTTS=createobject("sapi.spvoice")
- objTTS.speak"时间到了!时间到了!时间到了!时间到了!"
- Do
- btn = WshShell.Popup("时间到了!是否停止闹钟?", 20, "闹钟提示", &H4 + &H20)
-
- If (btn = 6 Or SkipCount = 10) Then WScript.Quit
-
- SkipCount = SkipCount + 1
- WScript.Sleep(1 * 60 * 1000)
-
- set objTTS=createobject("sapi.spvoice")
- objTTS.speak"时间到了!时间到了!已超时!已超时!"
- Loop
复制代码
作者: xswl 时间: 2022-12-3 17:42
回复 7# FOR
我给加了语音功能- Dim ws,a,a1,b1,b2,c1,c2,var,t,ts
- set ws=createobject("wscript.shell")
- t=time
- t1=int(timer)
- a=inputbox("输入等待时间(分钟)"&Chr(13)&Chr(13)&_
- "如 78 表示1小时零18分钟后启动闹钟","闹钟",""_
- )
- if a=false then Wscript.Quit '判断若点了关闭按钮则退出
- ts=inputbox("输入提示信息","提示","")
- if a=false then Wscript.Quit '判断若点了关闭按钮则退出
- a1=int(a*60) '将分钟换算成秒
- c1=int(a/60) '将输入的分钟转换为小时
- c2=int(a mod 60) '转换后剩余的分钟
- '计算当前时间加上输入分钟的时间
- b2=(c2+minute(t)) mod 60
- if c2+minute(t)>=60 then c1=c1+1
- b1=c1+hour(t) 'b1、b2供显示用
- b2="0"&b2 'b1、b2供显示用
- b2=right(b2,2) 'b1、b2供显示用
- msgbox "启动时间 "&b1&":"&b2
-
- t2=int(a1-(timer-t1))
- wscript.sleep 1000*t2 '1000 为 1秒
- var=c1 & " 小时零 " & c2 &" 分钟"
-
- set objTTS=createobject("sapi.spvoice")
- objTTS.speak"时间到了!时间到了!"
-
- set ws=WScript.CreateObject("WScript.Shell")
- For i = 1 to 10 step 1
- ws.run "cmd /c @echo ",0,true
- f=ws.popup ("输入的时间 "&var&chr(13)&_
- "换算成 "&a1&" 秒"&chr(13)&_
- "起始时间 "&t&chr(13)&_
- "结束时间 "&time&chr(13)&_
- "正确启动时间 "&b1&":"&b2,15,"时间到 "&ts,4+32) '将15改成0为不自动关闭
- If (f = 6 ) Then Wscript.Quit
- wscript.sleep 1000*10
- set objTTS=createobject("sapi.spvoice")
- objTTS.speak"时间到了!时间到了!已超时!已超时!"
- Next
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |