中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-06 16:15
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [VBS]HTA里如何脚本延迟? 查看 2,131 回复 15
楼 主 [VBS]HTA里如何脚本延迟? 发表于 2007-10-28 20:47 ·  中国 北京 联通
中级用户
★★
积分 397
发帖 168
注册 2006-10-08 10:07
19年会员
UID 64934
状态 离线
HTA里如何脚本延迟?
vbs里是wscript.sleep

hta 里如何做到呢?
2 发表于 2007-10-28 21:09 ·  中国 天津 电信
银牌会员
★★★
积分 1,436
发帖 739
注册 2007-10-11 17:44
18年会员
UID 99469
性别 男
状态 离线
试试setTimeout吧
3 发表于 2007-10-29 16:22 ·  中国 北京 联通
中级用户
★★
积分 397
发帖 168
注册 2006-10-08 10:07
19年会员
UID 64934
状态 离线
能不能给点详细使用方法,网上不好找,找了好多都是php什么的
4 发表于 2007-10-29 16:25 ·  中国 天津 电信
银牌会员
★★★
积分 1,436
发帖 739
注册 2007-10-11 17:44
18年会员
UID 99469
性别 男
状态 离线
setTimeout Method Internet Development Index

--------------------------------------------------------------------------------

Evaluates an expression after a specified number of milliseconds has elapsed.

Syntax

iTimerID = window.setTimeout(vCode, iMilliSeconds [, sLanguage])
Parameters

vCode Required. Variant that specifies the function pointer or string that indicates the code to be executed when the specified interval has elapsed.
iMilliSeconds Required. Integer that specifies the number of milliseconds.
sLanguage Optional. String that specifies one of the following values: JScript Language is JScript.
VBScript Language is VBScript.
JavaScript Language is JavaScript.


Return Value

Integer. Returns an identifier that cancels the evaluation with the clearTimeout method.


你没有《DHTML 手册》这本电子书吗?
5 发表于 2007-10-29 16:26 ·  中国 天津 电信
银牌会员
★★★
积分 1,436
发帖 739
注册 2007-10-11 17:44
18年会员
UID 99469
性别 男
状态 离线
MSDN里也有说明的

window.setTimeout("alert('Hello, world')", 1000);
6 发表于 2007-10-29 17:10 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
在HTA里,好像setTimeout并不能完全替代wscript.sleep,wscript.sleep是在延时后再执行下一行命令,而setTimeout是延时执行另一条命令,下一行的命令并不能延时。
目前我还没发现代替wscript.sleep的命令,只能用While...Wend 来计时,缺点是占用资源高
7 发表于 2007-10-29 21:09 ·  中国 北京 利达宽带
中级用户
★★
积分 273
发帖 91
注册 2007-05-07 18:12
19年会员
UID 87770
性别 男
状态 离线
我觉得可以把整个过程拆开成链表的形式
A->B->C
然后用用SetTimeout来调用
call A()

sub A()
'...
hB = settimeout("B",1000)
end
sub B()
'...
hC = settimeout("C",1000)
end
sub C()
'...
end
8 发表于 2007-10-30 19:55 ·  中国 北京 联通
中级用户
★★
积分 397
发帖 168
注册 2006-10-08 10:07
19年会员
UID 64934
状态 离线
可以不可以这样?只是个思路.
在HTA里,用ws.run运行 wscript.exe 让他执行一句wscript.sleep 3000 ,当然这里的ws.run后面的语句加上 true等待执行完毕再运行下行代码,这样就实现HTA延迟.
不知道这样行否?(我是楼主)
9 发表于 2007-10-30 21:28 ·  中国 北京 利达宽带
中级用户
★★
积分 273
发帖 91
注册 2007-05-07 18:12
19年会员
UID 87770
性别 男
状态 离线
楼上的意思应该是
hta->(bat)->vbs 对吧?

<script language="vbscript">
set fso = createobject("scripting.filesystemobject")
set stream = fso.opentextfile("sleep.vbs",2,true)
call stream.write("call wscript.sleep(1000)")
call stream.close()
set shell = createobject("wscript.shell")
call shell.run("sleep.vbs",0,true)
call msgbox("hello world!")
</script>


[ Last edited by sonicandy on 2007-10-30 at 09:36 PM ]
10 发表于 2007-10-30 22:06 ·  中国 北京 联通
中级用户
★★
积分 397
发帖 168
注册 2006-10-08 10:07
19年会员
UID 64934
状态 离线
谢谢,谢谢,借助于您的脚本,写下以下HTA,测试可以等待,但效果不是很好,会有点漏斗按钮.
可以进一步把这个文件写进temp目录下,然后进行文件属性的隐藏(我没搞这操作)

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>My HTML Application</title>
<script language="vbscript">
Sub sleep(t)
OpFile 1,t
CreateObject("WScript.Shell").run "sleep.vbs",0,True
msgbox("hello world!")
OpFile 0,0
End Sub
Sub OpFile(n,t)
Set fso=createobject("scripting.filesystemobject")
If n=1 Then
Set stream = fso.opentextfile("sleep.vbs",2,true)
stream.write "wscript.sleep("&t&")"
stream.close()
Set stream=Nothing
Else
fso.DeleteFile "sleep.vbs"
End If
Set fso=Nothing
End Sub

</script>
<hta:application
applicationname="MyHTA"
border="dialog"
borderstyle="normal"
caption="My HTML Application"
contextmenu="no"
icon="myicon.ico"
maximizebutton="no"
minimizebutton="yes"
navigable="no"
scroll="no"
selection="no"
showintaskbar="yes"
singleinstance="yes"
sysmenu="yes"
version="1.0"
windowstate="normal"
>
</head>
<body>
<input class="button" TYPE=BUTTON value="TestButton" name="btnTestButton" onClick="sleep(3000)">

</body>
</html>
11 发表于 2007-10-30 22:12 ·  中国 北京 联通
中级用户
★★
积分 397
发帖 168
注册 2006-10-08 10:07
19年会员
UID 64934
状态 离线
对于以上代码,个人提出问题,有没有这样的代码(思路):
shell.run "wscript.exe msgbox 'ok'"

也知道wscript.exe 要直接运行文件,但有没有什么程序可以直接执行 一句代码,这样可以达到:
shell.run "wscript.exe wscript.sleep(3000)"这样的功能,呵呵,遐想!

[ Last edited by kich on 2007-10-30 at 10:13 PM ]
12 发表于 2007-10-31 02:16 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
试试这个:
<script language="vbscript">
Set WshShell = CreateObject("Wscript.Shell")
msgbox "延时两秒"
WshShell.run "cmd /c echo Wscript.Sleep 2000>%tmp%\Sleep.vbs&&%tmp%\Sleep.vbs&&del/q %tmp%\Sleep.vbs",vbhid,true
msgbox "OK!"
</script>
13 发表于 2007-10-31 13:17 ·  中国 北京 朝阳区 联通
中级用户
★★
积分 397
发帖 168
注册 2006-10-08 10:07
19年会员
UID 64934
状态 离线
有没有不用临时文件就可以进行脚本延迟的??
14 发表于 2007-11-18 21:42 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
如果不需要高精度的,可以用:
WshShell.run "cmd /c ping -n 3 127.1>nul",vbhid,true
15 发表于 2007-11-19 08:35 ·  中国 北京 东城区 联通
中级用户
★★
积分 397
发帖 168
注册 2006-10-08 10:07
19年会员
UID 64934
状态 离线
进程里会有CMD闪烁,等待漏斗看了难受.
谢谢各位了,看样子还是用setTimeOut来想办法吧~~!哎
论坛跳转: