企业400电话
微网小程序
AI电话机器人
电商代运营
全 部 栏 目
企业400电话
网络优化推广
AI电话机器人
呼叫中心
网站建设
商标✡知产
微网小程序
电商运营
彩铃•短信
增值拓展业务
在 HTA 中暂停脚本的方法
问:
您好,脚本专家!如何在 HTA 中暂停脚本?
-- TJ
答:
您好,TJ。您知道,从古至今,人们已经花费了巨大的时间和精力来探索生命的意义。脚本专家却从未参与其中。为什么?好吧,先不说懒,我们知道那无关紧要:就算您的确找到了生命的意义,也没人在乎它。没人想知道我们存在的理由;相反,他们 - 同您一样 - 只想知道到底如何才能暂停一个嵌入在 HTML 应用程序 (HTA) 中的脚本。那才是脚本专家为之献身的事业。
现在,如果您不熟悉 HTA,您首先想到的可能是“使用 Wscript.Sleep 即可”。(顺便说一句,如果您不熟悉 HTA,可以浏览 HTA Developers Center(英文)。)这是个好主意,但却无法实现。为什么?因为 Wscript 对象是个稍微有些独特的对象;原因之一是您实际上并不能创建此对象的实例。而只要您运行在 Windows Script Host 之下,Wscript 即会自动为您提供。问题就在这里:当您在 HTA 内部运行代码时,您并没有运行在 Windows Script Host 之下。您其实是运行在 Internet Explorer 所提供的脚本宿主之下。因为您没有运行在 Windows Script Host 之下,因此您无法自动访问 Wscript 对象,而且因为您无法创建自己的 Wscript 对象,也就无法访问 Wscript.Sleep。用高科技术语来讲,就是“瘫痪”了。
如果 Internet Explorer 提供类似于 Wscript.Sleep 的方法,则这也不是什么大不了的问题;很不幸,它没有提供。那么是否有某种神奇的解决方法,我们可以使用它来代替 Sleep 方法呢?这有必要问吗?
[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
我们的 HTA 非常简单:它只由一个按钮组成,单击时会运行名为 Test 的子例程。很了不起,对不对?好吧,我们先看看 HTA 的 SCRIPT> 部分,然后再确定它是不是真的很了不起。
我们在 SCRIPT> 部分所做的第一件事就是声明一个名为 dtmStartTime 的全局变量:
Dim dtmStartTime
这其实对于暂停脚本没有任何作用;我们只是利用此变量帮助我们查看脚本是否的确象所期待的那样暂停。如果您现在还没有明白其含义,别急:很快就会清楚。
接下来是 Test 子例程,在我们单击按钮时调用它:
Sub Test
dtmStartTime = Now
idTimer = window.setTimeout("PausedSection", 5000, "VBScript")
End Sub
请注意,此子例程中仅有两行代码。在第一行中,我们只是将当前的时间和日期(使用 Now 函数)赋予变量 dtmStartTime。接下来是下面这行代码:
idTimer = window.setTimeout("PausedSection", 5000, "VBScript")
无论您相信与否,这就是我们实现 Sleep 方法函数的方式。我们使用 setTimeout 方法创建了一个定时器,其 ID 为 idTimer。正如您所看到的,我们将三个参数传递给 setTimeout:
? PausedSection。此参数为定时器到时后我们要运行的子例程的名称。
? 5000。此参数为在调用 PausedSection 之前我们希望定时器等待的时间(以毫秒计;5000 毫秒等于5 秒)。换句话说,这就是我们需要的暂停。如果需要将脚本暂停 30 秒,则可将此参数设置为 30000。
? VBScript。此参数是必需的,它只是告诉脚本 PausedSection 是用 VBScript 编写的。
即,我们单击按钮时,Test 子例程将运行。Test 子例程运行时,它将创建名为 idTimer 的定时器。idTimer 的唯一功能就是等待 5 秒然后调用子例程 PausedSection。明白了吗?好的。
那么子例程 PausedSection 执行什么操作?显然,我们可以运行任何希望的代码;简单起见,在此我们仅做两件事情。首先,显示一个消息框,它显示我们单击此按钮的时间及消息框自身实际显示在屏幕上的时间:
Msgbox dtmStartTime vbCrLf Now
若允许舍入误差,这两个时间的间隔应为 5 秒。这重要吗?当然重要。请记住,在 PausedSection 子例程内部首先发生的就是显示此消息框。如果此消息框在我们单击按钮 5 秒之后显示,则表明我们的脚本暂停了 5 秒。您可能会记起,这就是我们的最终目的。
我们在 PausedSection 子例程中要做的另外一件事情就是调用 clearTimeout 方法来有效地清除定时器:
window.clearTimeout(idTimer)
为什么这样做?原因很简单:定时器是设计为永远运行的。如果不清除定时器,每 5 秒钟 idTimer 就将调用 PausedSection 子例程一次,因此每 5 秒钟我们的这个小消息框就会在屏幕上弹出一次。我们真的不希望每 5 秒钟就看到这样的消息框,因此使用 clearTimeout 删除定时器。
我们承认,这确实不如使用 Wscript.Sleep 5000 那么简单;这表明在您启用和禁用定时器之前可能不得不稍稍掂量一番。因此,这或许带点挑战,但是,别忘了,这不也是生命的全部意义所在吗?
不,这不是一个反问句。正如我们所说,我们一直致力于暂停 HTA;除此之外,我们就不知道生命到底是什么了。
上一篇:
编写可以打开文本文件并打乱在该文件中所找到的单词顺序的vbs脚本
下一篇:
运行脚本之前,如何确定计算机上的默认脚本宿主的代码
相关文章
在 HTA 中暂停脚本的方法
问: 您好,脚本专家!如何在HTA中暂停脚本? --TJ 答: 您好,TJ。您知道,从古至今,人们已经花费了巨大的时间和精力来探索生命的意义。脚本专家却从未参与其中。为什么?好吧,在,HTA,中,暂停,脚本,的,...
VBS教程:函数-Sgn 函数
Sgn 函数 返回表示数字符号的整数。 Sgn( number ) number 参数可以是任意有效的数值表达式...
400电话是免费打的吗北京400电话是不是免费的?
400电话不是免费的。 400电话不同于传统电话。 400电话是一种分摊付款的业务,也就是...
百度地图标注-三维或将标“德清籍”
点入云南昆明百度全景,能够看到富贵街区的建筑物、路途、天空,似乎感同身受,云...
接电话机器人怎么关闭(接电话机器人怎么关闭音乐)
今天给各位分享接电话机器人怎么关闭的知识,其中也会对接电话机器人怎么关闭音乐...
基于PostgreSql 别名区分大小写的问题
PostgreSql是区分大小写的 如果别名的大小不一致就会提示错误: SELECT *FROM ( SELECT cpi."...
网络外呼系统线路商(外呼线路供应商推荐)
本文目录一览: 1、现在外呼系统哪家公司做的比较好?2、外呼系统哪家公司做得好?...
福建电销防封卡哪的好点
福建电销防封卡哪的好点 哪些行业适合电销卡?电话客服部门,这个部门的工作人员虽...
网络呼叫中心软件虚拟号码
一个好的网络呼叫中心软件,能帮助企业进行更好的客户管理和营销服务,那它的具体...
400电话平台都有哪些功能?
400电话平台都有哪些功能? 1、您可以在管理平台自助绑定和更改电话,最多可以绑定...
sqlserver replace函数 批量替换数据库中指定字段内指定字符
语法 REPLACE ( 'string_expression1' , 'string_expression2' , 'string_expression3' ) 参数说明 'string_expr...
荆州智能电销机器人公司(荆州智能电销机器人公司电话
本文目录一览: 1、比复电销板滞人挺火的,哪个最好用?谁用过的,推荐一下 2、有谁...
炒货类的公众号怎么运营
炒货是我们日常生活中进行吃的零食之一。炒货本身营养就蛮高,维生素、蛋白质、油...
杭州智能电销机器人供应商(杭州机器人厂家)
本文目录一览: 1、浙江国自机器人技能有限公司怎么样?2、我国十大机器人公司3、有...
400电话办理费用哪家便宜400电话开通多少钱一年
400电话是为企业办理的。 很多人认为大城市的成本会更高,尤其是在江苏这样的省份。...
衡水网络电话外呼系统的简单介绍
今天给各位分享衡水网络电话外呼系统的知识,其中也会对进行解释,如果能碰巧解决...
在 HTA 中暂停脚本的方法
问: 您好,脚本专家!如何在HTA中暂停脚本? --TJ 答: 您好,TJ。您知道,从古至今,人们已经花费了巨大的时间和精力来探索生命的意义。脚本专家却从未参与其中。为什么?好吧,在,HTA,中,暂停,脚本,的,...
咨 询 客 服