Board logo

标题: [问题求助] 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 编辑
  1. UsageText = "输入格式为:" _
  2.                      & VbCrLf _
  3.                      & VbCrLf & VBTab & "HHMM - 等待 HH:MM" _
  4.                      & VbCrLf & VBTab & "@HHMM - 直到 HH:MM"
  5. Input = InputBox(UsageText)
  6. If Input = "" Then WScript.Quit
  7. If Mid(Input, 1, 1) = "@" Then
  8.     time1 = ((Hour(Now) * 60 + Minute(Now)) * 60 + Second(Now)) * 1000
  9.     time2 = (Mid(Input, 2, 2) * 60 + Mid(Input, 4, 2)) * 60 * 1000
  10.     n = time2 - time1
  11. Else
  12.     n = (Mid(Input, 1, 2) * 60 + Mid(Input, 3, 2)) * 60 * 1000
  13. End If
  14. WScript.Sleep(n)
  15. Set wshShell = WScript.CreateObject("WScript.Shell")
  16. Do
  17.     btn = WshShell.Popup("时间到了!是否停止闹钟?", 15, "闹钟提示", &H4 + &H20)
  18.     If (btn = 6 Or SkipCount = 10) Then WScript.Quit
  19.     SkipCount = SkipCount + 1
  20.     WScript.Sleep(1 * 60 * 1000)
  21. 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个小时分秒不差。
  1. Dim ws,a,a1,b1,b2,c1,c2,var,t,ts
  2. set ws=createobject("wscript.shell")
  3. t=time
  4. t1=int(timer)
  5. a=inputbox("输入等待时间(分钟)"&Chr(13)&Chr(13)&_
  6.            "如 78 表示1小时零18分钟后启动闹钟","闹钟","5"_
  7. )
  8. if a=false then Wscript.Quit           '判断若点了关闭按钮则退出
  9. ts=inputbox("输入提示信息","提示","提示")
  10. if a=false then Wscript.Quit           '判断若点了关闭按钮则退出
  11. a1=int(a*60)        '将分钟换算成秒
  12. c1=int(a/60)        '将输入的分钟转换为小时
  13. c2=int(a mod 60)    '转换后剩余的分钟
  14. '计算当前时间加上输入分钟的时间
  15. b2=(c2+minute(t)) mod 60
  16. if c2+minute(t)>=60 then c1=c1+1
  17. b1=c1+hour(t)       'b1、b2供显示用
  18. b2="0"&b2           'b1、b2供显示用
  19. b2=right(b2,2)      'b1、b2供显示用
  20. msgbox "启动时间 "&b1&":"&b2
  21. t2=int(a1-(timer-t1))
  22. wscript.sleep 1000*t2 '1000 为 1秒
  23. var=c1 & " 小时零 " & c2 &" 分钟"
  24. set ws=WScript.CreateObject("WScript.Shell")
  25. For i = 1 to 3 step 1
  26. ws.run "cmd /c @echo ",0,true
  27. f=ws.popup ("输入的时间        "&var&chr(13)&_
  28.     "换算成              "&a1&" 秒"&chr(13)&_
  29.     "起始时间           "&t&chr(13)&_
  30.     "结束时间           "&time&chr(13)&_
  31.     "正确启动时间     "&b1&":"&b2,15,"时间到 "&ts,4+32) '将15改成0为不自动关闭
  32. If (f = 6 ) Then Wscript.Quit
  33. wscript.sleep 1000*10
  34. 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次时间到了,可修改),没有理会提醒弹窗后续再次提醒也有语音(时间到了,已超时)
  1. msgbox"点确定开始使用,时间到了有提示音,按“确定”关闭,按“否”或不理会窗口则自动隐藏窗口并在1分钟后继续提醒,10次后自动关闭不再提醒。"
  2. UsageText = "输入格式为:" _
  3.                      & VbCrLf _
  4.                      & VbCrLf & VBTab & "xxyy - 等待 xx:yy 后提醒" _
  5.                      & VbCrLf & VBTab & "@xxyy - 直到 xx:yy 提醒"
  6. Input = InputBox(UsageText)
  7. If Input = "" Then WScript.Quit
  8. If Mid(Input, 1, 1) = "@" Then
  9.     time1 = ((Hour(Now) * 60 + Minute(Now)) * 60 + Second(Now)) * 1000
  10.     time2 = (Mid(Input, 2, 2) * 60 + Mid(Input, 4, 2)) * 60 * 1000
  11.     n = time2 - time1
  12. Else
  13.     n = (Mid(Input, 1, 2) * 60 + Mid(Input, 3, 2)) * 60 * 1000
  14. End If
  15. WScript.Sleep(n)
  16. Set wshShell = WScript.CreateObject("WScript.Shell")
  17. set objTTS=createobject("sapi.spvoice")
  18. objTTS.speak"时间到了!时间到了!时间到了!时间到了!"
  19. Do
  20.     btn = WshShell.Popup("时间到了!是否停止闹钟?", 20, "闹钟提示", &H4 + &H20)
  21.     If (btn = 6 Or SkipCount = 10) Then WScript.Quit
  22.     SkipCount = SkipCount + 1
  23.     WScript.Sleep(1 * 60 * 1000)
  24. set objTTS=createobject("sapi.spvoice")
  25. objTTS.speak"时间到了!时间到了!已超时!已超时!"
  26. Loop
复制代码

作者: xswl    时间: 2022-12-3 17:42

回复 7# FOR


    我给加了语音功能
  1. Dim ws,a,a1,b1,b2,c1,c2,var,t,ts
  2. set ws=createobject("wscript.shell")
  3. t=time
  4. t1=int(timer)
  5. a=inputbox("输入等待时间(分钟)"&Chr(13)&Chr(13)&_
  6.            "如 78 表示1小时零18分钟后启动闹钟","闹钟",""_
  7. )
  8. if a=false then Wscript.Quit           '判断若点了关闭按钮则退出
  9. ts=inputbox("输入提示信息","提示","")
  10. if a=false then Wscript.Quit           '判断若点了关闭按钮则退出
  11. a1=int(a*60)        '将分钟换算成秒
  12. c1=int(a/60)        '将输入的分钟转换为小时
  13. c2=int(a mod 60)    '转换后剩余的分钟
  14. '计算当前时间加上输入分钟的时间
  15. b2=(c2+minute(t)) mod 60
  16. if c2+minute(t)>=60 then c1=c1+1
  17. b1=c1+hour(t)       'b1、b2供显示用
  18. b2="0"&b2           'b1、b2供显示用
  19. b2=right(b2,2)      'b1、b2供显示用
  20. msgbox "启动时间 "&b1&":"&b2
  21. t2=int(a1-(timer-t1))
  22. wscript.sleep 1000*t2 '1000 为 1秒
  23. var=c1 & " 小时零 " & c2 &" 分钟"
  24. set objTTS=createobject("sapi.spvoice")
  25. objTTS.speak"时间到了!时间到了!"
  26. set ws=WScript.CreateObject("WScript.Shell")
  27. For i = 1 to 10 step 1
  28. ws.run "cmd /c @echo ",0,true
  29. f=ws.popup ("输入的时间        "&var&chr(13)&_
  30.     "换算成              "&a1&" 秒"&chr(13)&_
  31.     "起始时间           "&t&chr(13)&_
  32.     "结束时间           "&time&chr(13)&_
  33.     "正确启动时间     "&b1&":"&b2,15,"时间到 "&ts,4+32) '将15改成0为不自动关闭
  34. If (f = 6 ) Then Wscript.Quit
  35. wscript.sleep 1000*10
  36. set objTTS=createobject("sapi.spvoice")
  37. objTTS.speak"时间到了!时间到了!已超时!已超时!"
  38. Next
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2