返回列表 发帖

[问题求助] 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-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)
LoopCOPY

TOP

谢版主回复,请问 WScript.Sleep 延时准确吗?比如我想延时 2个小时,误差有多大?
自己看教程写了个把时间拆开成数字再循环获取当前时间,用 if 对比,虽能达到目的,可cup占用太厉害了。。
还有 WScript.Sleep 延时 1分钟 是多少? WScript.Sleep (6000) 吗?

TOP

回复 3# FOR


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

不清楚。

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

1分钟 × 60秒 × 1000毫秒,即 WScript.Sleep (1 * 60 * 1000),即 WScript.Sleep (60000)。

TOP

谢谢,再次感谢,代码已基本能看懂了

TOP

好强大。。。。。。

TOP

::一晚没睡,看教程,百度。。。写了改改了写总算写出自己满意的闹钟了。。再次感谢各位给我的帮助
::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
NextCOPY

TOP

tmplinshi 发表于 2012-11-19 21:08


时间计算有专门的函数

TOP

时间计算有专门的函数
Demon 发表于 2012-11-22 13:35



哦。谢谢指点。

我没有仔细的学过 VBS,从我的代码上也看得出,我没有用 Dim。二楼的代码我都是借着 Google 和《Windows 脚本技术》写出来的。

TOP

哦。谢谢指点。

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


小脚本一般不用Dim,二楼的代码已经写得很好了。

TOP

本帖最后由 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"时间到了!时间到了!已超时!已超时!"
LoopCOPY

TOP

回复 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"时间到了!时间到了!已超时!已超时!"
NextCOPY

TOP

返回列表