标题: [已结]谁懂VBS,帮忙做个倒计时.
[打印本页]
作者: voiL
时间: 2006-10-15 05:18
标题: [已结]谁懂VBS,帮忙做个倒计时.
找了很多资料,在不用外部命令的情况下.CMD没法做出倒计时.
但我想在脚本中给用户提个醒.没办法之下只有求之于VBS了.
希望哪位路过的大虾帮帮工忙...
我要从BAT里直接写入*.VBS,然后运行之.
这个VBS只需弹出个窗口告诉用户还有多少时间可以执行操作就OK了.
致谢!
还有一问题就是:CMD的窗口能否指定坐标???
例如我想让窗口定位在屏幕的右上角.可有好的办法???
[
Last edited by voiL on 2006-10-21 at 02:19 ]
作者: vkill
时间: 2006-10-15 05:30
@echo off
set n=10
:start
cls
echo %n%秒后自动退出
set /a n=n-1
ping -n 2 127.0.0.1>nul
if %n%==0 goto end
goto start
:end
只是记时不怎么准确
作者: voiL
时间: 2006-10-15 05:42
Quote: |
Originally posted by he200377 at 2006-10-15 05:30:
@echo off
set n=10
:start
cls
echo %n%秒后自动退出
set /a n=n-1
ping -n 2 127.0.0.1>nul
if %n%==0 goto end
goto start
:end
只是记时不怎么准确 |
|
谢谢兄台的热心回复...
但这个仅仅是个倒计时...
而我需要的并不是倒计时完了就退出这么简单...
而是让用户知道他还有多少时间可以操作...
兄的倒计时运行时,用户就不能再操作了...
你这个方法我之前也有想过...
这就是我一楼上面加红色字的部分的提问...
如果在BAT里再start另外一个BAT(倒计时)...
那么新运行的那个BAT必定会挡住之前的那个窗口(虽然可以指定窗口大小)...
但这总不是我的初衷...
最理想的就是左边是主窗口...右上角弹个小的CMD计时窗口...
我知道CMD里可以用
@mode con:cols=xx lines=xx 来指定窗口的高度和宽度,但不知有没可以指定坐标的命令...
不知哪位大虾有好的解决办法???
[
Last edited by voiL on 2006-10-15 at 05:54 ]
作者: redtek
时间: 2006-10-15 06:16
是做批处理类型的答题系统?
还是批处理类型的模拟考试系统?
作者: zerocq
时间: 2006-10-19 00:33
楼主看看这个可以不,会出现一个窗口提醒,该窗口3秒自动消失
不知道合不合你的意?
@echo off
set /p i=多少秒提醒一次?:
set /p j=倒计时多少秒结束?:
echo wscript.sleep %i%*1000 >i.vbs
:start
cscript //nologo i.vbs
if %j% LEQ 0 del i.vbs&&goto :eof
set /a j=%j%-%i%
echo dim objshell>j.vbs
echo Set objshell = WScript.CreateObject ("WSCript.shell")>>j.vbs
echo ts =objshell.Popup("你还有%j%秒操作",3, "提示", 0 + 32)>>j.vbs
cscript //nologo j.vbs
goto :start
作者: 无奈何
时间: 2006-10-19 00:48
这个命令是不是能完成你要的效果。
msg %USERNAME% /TIME:3 "给你三秒时间,猜猜我是谁!"
作者: yfd11
时间: 2006-10-19 01:33
@echo off
color 2f
Title=弱智制作QQ:441540230
set /p t1=请输入时间最后两位数有效:
set t2=%time% &echo 现在时间是:%time%
set/a t1=%t1:~-2%-60
if "%t1:~0,1%"=="-" set/a t1=60+%t1%
rem echo %t2:~-6,-4%
set/a t1=%t2:~-6,-4%+%t1%-60
if "%t1:~0,1%"=="-" set/a t1=%t1%+60
set t1==00%t1%
echo 到%t1:~-2,-1%%t1:~-1%秒结束.
:loop1
:loop2
if "%t1:~-2,-1%" NEQ "%time:~-5,-4%" goto :loop1
if "%t1:~-1%" NEQ "%time:~-4,-3%" goto :loop2
echo 谢谢您的使用 按任意键结束 &&pause>nul 1>nul
不过用VBS更好.
WScript.Sleep 1000(10秒)
作者: 3742668
时间: 2006-10-19 01:47
intTime = 10
If WScript.Arguments.Count <> 0 Then intTime = WScript.Arguments(0)
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
.Navigate "about:blank"
.FullScreen = 1
.Height = 50
.Width = 150
.Left = .document.parentwindow.screen.availwidth - .Width
.Top = .document.parentwindow.screen.availheight - .Height
.Visible = 1
.Document.write "<html><body bgcolor=beige scroll=no></body></html>"
Set objBody = .Document.Body
End With
For i = 1 To intTime
objBody.InnerHtml = "<font color=blue>你还有<font color=red>" & _
intTime - i & "</font>秒时间!</font>"
WScript.Sleep 1000
Next
objIE.Quit
Set objBody = Nothing
Set objIE = Nothing
默认是10秒,可以自己带时间参数运行,单位为秒.
作者: 3742668
时间: 2006-10-19 07:48
Quote: |
还有一问题就是:CMD的窗口能否指定坐标???
例如我想让窗口定位在屏幕的右上角.可有好的办法??? |
|
一定要在右上角吗?左上角难道就不行?
@echo off
start /max cmd /c "title 倒数 && mode con lines=5 cols=30 && for /l %%i in (10,-1,1) do cls && echo 正在倒数:%%i && ping 1 -n 1 -w 1000>nul"
作者: lxmxn
时间: 2006-10-19 11:28
呵呵,版主的代码用的妙。
先用"start /max"命令使CMD窗口最大化到屏幕的(0,0)位置,然后再用"mode con"使其变为最小,接着一个for+ping的延时用的非常巧妙。小弟佩服。
为版主先顶4分。
作者: voiL
时间: 2006-10-19 12:28
Quote: |
Originally posted by zerocq at 2006-10-19 00:33:
楼主看看这个可以不,会出现一个窗口提醒,该窗口3秒自动消失
不知道合不合你的意?
@echo off
set /p i=多少秒提醒一次?:
set /p j=倒计时多少秒结栮.. |
|
感谢zerocq提供的帮助.
初步试了一下兄的代码,功能是实现了.只是不能客观地给用户一个动态的提示.
不过你那个3秒后自动消失的窗口做得很新颖.收藏下来以备后用.
再次感谢.
作者: voiL
时间: 2006-10-19 12:32
至于无奈何版主给出的代码在我的系统上没法完成测试.(winxp SP2)
无奈何版主的功力是有目共睹的,还望版主不吝指点一二.
因为我也是刚学批处理没多久,再加上功底浅,很多东西都没搞懂.
作者: voiL
时间: 2006-10-19 12:36
Quote: |
Originally posted by yfd11 at 2006-10-19 01:33:
@echo off
color 2f
Title=弱智制作QQ:441540230
set /p t1=请输入时间最后两位数有效:
set t2=%time% &echo 现在时间是:%time%
set/a t1=%t1:~-2%-60
if "%t1:~0,1%"= ... |
|
兄的代码我也曾写过类似的.
只是觉得没有一种明确的时间感.
往往时间到了,用户还没决定好他要做的事情.
不过兄的代码中也有不少值得学习之处.收藏以备后用.
谢谢.
作者: voiL
时间: 2006-10-19 12:43
Quote: |
Originally posted by 3742668 at 2006-10-19 01:47:
[code]
intTime = 10
If WScript.Arguments.Count <> 0 Then intTime = WScript.Arguments(0)
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
.Naviga ... |
|
兄给出的代码完全符合了我的要求.
而且计时方式也比较客观生动.
还想请教兄一个问题:
在倒计时中,时间还没倒数到0,有何方法可以中止计时呢?
我唯一能想到的一个方法就是用Sendkeys来关闭计时窗口.
不知兄还有其它更好更稳定的方法没?
作者: voiL
时间: 2006-10-19 12:47
Quote: |
Originally posted by 3742668 at 2006-10-19 07:48:
一定要在右上角吗?左上角难道就不行?
[code]
@echo off
start /max cmd /c "title 倒数 && mode con lines=5 cols=30 && for /l %%i in (10,-1,1) do cls && ... |
|
兄的代码真绝了,让我又受益不浅.
发完这个帖子之后.我又尝试用类似2楼兄台所提出的方法那样直接用批处理来计时.
然后另设一个指向该倒计时的快捷方式,再设置坐标来指定窗口位置.(然后用Sendkeys来中断计时器)才能达到兄代码的效果.
现兄短短的一句代码就把我几番功夫才搞定的事情给解决了.
不得不佩服兄的编程能力.
实在是太感谢了.
[
Last edited by voiL on 2006-10-19 at 12:51 ]
作者: vkill
时间: 2006-10-19 21:20
msg用的好
作者: 3742668
时间: 2006-10-20 08:05
Quote: |
在倒计时中,时间还没倒数到0,有何方法可以中止计时呢? |
|
方法比较多,无非就是设置一些标志,让脚本检测到标志后退出.比如判断某个文件是否存在,在则退出;或者判断注册表键值等等等等.
不过我建议还是在bat中用 taskkill /fi "WINDOWTITLE eq xxx"来实现,或者直接就结束wscript.exe.
另外由于昨天时间有限,没有完全解决你的问题.关于弹出窗口的指定坐标的问题,可以通过修改注册表来实现.
1.在HKEY_CURRENT_USER\Console下新建一个主键,名字就是 窗口标题名
2.然后在它右边建一reg_dword键:WindowPosition,取值为xxxxyyyy,其中xxxx是16进制的横坐标,yyyy为16进制的纵坐标,比如想让窗口基准坐标为10,10可以设置它的值为a000a
这样当你再打开一个 标题为上面步骤1建立的主键的字符时,窗口坐标就会出现在步骤2中指定的坐标处.
作者: voiL
时间: 2006-10-20 09:09
Quote: |
Originally posted by 3742668 at 2006-10-20 08:05:
方法比较多,无非就是设置一些标志,让脚本检测到标志后退出.比如判断某个文件是否存在,在则退出;或者判断注册表键值等等等等.
不过我建议还是堮.. |
|
版主果真强人是也...
用taskkill来关闭进程比用Sendkeys要好得多也安全稳定得多...
不知是否系统因素...版主的命令行在我机子上测试还存在些小问题...
就是运行该命令后(指taskkill /fi....此命令),会提示
"信息: 没有运行的带有指定标准的任务。"
我看了一下taskkill的帮助之后,稍修改了一下:
taskkill /fi "windowtitle eq xxx*"之后就没出错了.(标题后面加个通配符)
----------------------------------------------------------------------------
另外,希望无奈何版主看到此贴后能给小弟及各位坛友指点一下 msg 那命令...
我在CMD下看了N久msg的命令,也试着自己编写...
但都出现了 "获取会话名称时的错误 1702" 的错误提示(包括您给我写的命令)...
作者: 3742668
时间: 2006-10-20 09:28
关于taskkill的问题,是由于你的标题与taskkill中的标题不一样导致的,尽管它们看上去一样.其实如果是我自己用的话我一定会用wmic process来结束进程,因为在它里面可以用commandline来判断启动的命令,绝对不会判断错误.
关于msg的问题,初步认为为没有开启相关的服务.个人猜测是和rpc相关的,建议看看Terminal Services服务是否启动,也可以运行wmic process where "caption='svchost.exe'" get commandline 查看是否存在C:\WINDOWS\system32\svchost -k DcomLaunch
C:\WINDOWS\system32\svchost -k rpcss
C:\WINDOWS\System32\svchost.exe -k netsvcs
C:\WINDOWS\system32\svchost.exe -k NetworkService
C:\WINDOWS\system32\svchost.exe -k LocalService
等服务.
当然,上面的都只是猜测,并不一定就是正确的.不过还是建议从服务上面下工夫.
p.s:我见过N多网上下的ghost版的XP都缺少不少功能的,特别是番茄花园的,另外home版的xp(你好象不是.)....
作者: voiL
时间: 2006-10-20 11:02
版主果然厉害.
我用的是蕃茄的系统,不过不是Ghost的,是原版纯安装的...
另外是用了蕃茄的服务优化再手动开启了一些需要的服务...
wmic process where "caption='svchost.exe'" get commandline 之后显示如下:
Quote: |
C:\WINDOWS\system32\svchost -k DcomLaunch
C:\WINDOWS\system32\svchost -k rpcss
C:\WINDOWS\System32\svchost.exe -k netsvcs
C:\WINDOWS\system32\svchost.exe -k NetworkService
C:\WINDOWS\system32\svchost.exe -k imgsvc |
|
非常感谢3742668版主的热心和耐心...
来这里一年有余,我学到了不少东西...
究其因就是因为这里在很多如版主般热心的朋友...
在此说声: 谢谢3742668版主,谢谢论坛上帮助过我的朋友...
作者: voiL
时间: 2006-10-20 11:15
嗯.对了,msg后的错误我想应该就是Terminal Services服务关闭产生的问题.
因为我计算机里Terminal Services服务正是关闭了的.