找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27427|回复: 11

[问题求助] vbs实现闹钟及计时器

[复制链接]
发表于 2012-11-18 15:43:44 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-9-3 13:37 编辑

vbs闹钟
求一vbs闹钟
功能如下
1、运行后弹出对话框,输入闹钟时间和提示信息。
2、输入时间最好分为两种,一种是直接输入闹钟时间,另一种是输入等待时间,最好是用一个前缀符号来表示
比如输入 1308 表示13点08分 启动闹钟
输入 #0105 表示一个小时零5分钟后 启动闹钟
3、闹钟启动后,显示提示信息,并带有提示音
4、窗口显示15秒,按“确定”关闭,按“否”或不理会窗口则自动隐藏窗口并在1分钟后继续提醒,10次后自动关闭不再提醒。
发表于 2012-11-19 21:08:50 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2012-11-20 00:36:00 | 显示全部楼层
谢版主回复,请问 WScript.Sleep 延时准确吗?比如我想延时 2个小时,误差有多大?
自己看教程写了个把时间拆开成数字再循环获取当前时间,用 if 对比,虽能达到目的,可cup占用太厉害了。。
还有 WScript.Sleep 延时 1分钟 是多少? WScript.Sleep (6000) 吗?
发表于 2012-11-20 02:02:27 | 显示全部楼层
回复 3# FOR


请问 WScript.Sleep 延时准确吗?比如我想延时 2个小时,误差有多大?

不清楚。

还有 WScript.Sleep 延时 1分钟 是多少? WScript.Sleep (6000) 吗?

1分钟 × 60秒 × 1000毫秒,即 WScript.Sleep (1 * 60 * 1000),即 WScript.Sleep (60000)。
 楼主| 发表于 2012-11-20 02:28:50 | 显示全部楼层
谢谢,再次感谢,代码已基本能看懂了
发表于 2012-11-20 07:02:20 | 显示全部楼层
好强大。。。。。。
 楼主| 发表于 2012-11-20 19:21:52 | 显示全部楼层
::一晚没睡,看教程,百度。。。写了改改了写总算写出自己满意的闹钟了。。再次感谢各位给我的帮助
::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
复制代码
发表于 2012-11-22 13:35:45 | 显示全部楼层
tmplinshi 发表于 2012-11-19 21:08


时间计算有专门的函数
发表于 2012-11-22 13:50:47 | 显示全部楼层
时间计算有专门的函数
Demon 发表于 2012-11-22 13:35



哦。谢谢指点。

我没有仔细的学过 VBS,从我的代码上也看得出,我没有用 Dim。二楼的代码我都是借着 Google 和《Windows 脚本技术》写出来的。
发表于 2012-11-22 13:53:59 | 显示全部楼层
哦。谢谢指点。

我没有仔细的学过 VBS,从我的代码上也看得出,我没有用 Dim。二楼的代码我都是借 ...
tmplinshi 发表于 2012-11-22 13:50


小脚本一般不用Dim,二楼的代码已经写得很好了。
发表于 2022-12-3 17:40:22 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2022-12-3 17:42:51 | 显示全部楼层
回复 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 20:41 , Processed in 0.021153 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表