麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > VBScript > 正文

在 HTA 中暫停腳本的方法

2020-07-26 12:03:16
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
問(wèn):
您好,腳本專(zhuān)家!如何在 HTA 中暫停腳本?
-- TJ
答:
您好,TJ。您知道,從古至今,人們已經(jīng)花費(fèi)了巨大的時(shí)間和精力來(lái)探索生命的意義。腳本專(zhuān)家卻從未參與其中。為什么?好吧,先不說(shuō)懶,我們知道那無(wú)關(guān)緊要:就算您的確找到了生命的意義,也沒(méi)人在乎它。沒(méi)人想知道我們存在的理由;相反,他們 - 同您一樣 - 只想知道到底如何才能暫停一個(gè)嵌入在 HTML 應(yīng)用程序 (HTA) 中的腳本。那才是腳本專(zhuān)家為之獻(xiàn)身的事業(yè)。 
現(xiàn)在,如果您不熟悉 HTA,您首先想到的可能是“使用 Wscript.Sleep 即可”。(順便說(shuō)一句,如果您不熟悉 HTA,可以瀏覽 HTA Developers Center(英文)。)這是個(gè)好主意,但卻無(wú)法實(shí)現(xiàn)。為什么?因?yàn)?nbsp;Wscript 對(duì)象是個(gè)稍微有些獨(dú)特的對(duì)象;原因之一是您實(shí)際上并不能創(chuàng)建此對(duì)象的實(shí)例。而只要您運(yùn)行在 Windows Script Host 之下,Wscript 即會(huì)自動(dòng)為您提供。問(wèn)題就在這里:當(dāng)您在 HTA 內(nèi)部運(yùn)行代碼時(shí),您并沒(méi)有運(yùn)行在 Windows Script Host 之下。您其實(shí)是運(yùn)行在 Internet Explorer 所提供的腳本宿主之下。因?yàn)槟鷽](méi)有運(yùn)行在 Windows Script Host 之下,因此您無(wú)法自動(dòng)訪問(wèn) Wscript 對(duì)象,而且因?yàn)槟鸁o(wú)法創(chuàng)建自己的 Wscript 對(duì)象,也就無(wú)法訪問(wèn) Wscript.Sleep。用高科技術(shù)語(yǔ)來(lái)講,就是“癱瘓”了。
如果 Internet Explorer 提供類(lèi)似于 Wscript.Sleep 的方法,則這也不是什么大不了的問(wèn)題;很不幸,它沒(méi)有提供。那么是否有某種神奇的解決方法,我們可以使用它來(lái)代替 Sleep 方法呢?這有必要問(wèn)嗎?

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]

我們的 HTA 非常簡(jiǎn)單:它只由一個(gè)按鈕組成,單擊時(shí)會(huì)運(yùn)行名為 Test 的子例程。很了不起,對(duì)不對(duì)?好吧,我們先看看 HTA 的 <SCRIPT> 部分,然后再確定它是不是真的很了不起。
我們?cè)?nbsp;<SCRIPT> 部分所做的第一件事就是聲明一個(gè)名為 dtmStartTime 的全局變量:
Dim dtmStartTime
這其實(shí)對(duì)于暫停腳本沒(méi)有任何作用;我們只是利用此變量幫助我們查看腳本是否的確象所期待的那樣暫停。如果您現(xiàn)在還沒(méi)有明白其含義,別急:很快就會(huì)清楚。
接下來(lái)是 Test 子例程,在我們單擊按鈕時(shí)調(diào)用它:
Sub Test
    dtmStartTime = Now 
    idTimer = window.setTimeout("PausedSection", 5000, "VBScript")
End Sub
請(qǐng)注意,此子例程中僅有兩行代碼。在第一行中,我們只是將當(dāng)前的時(shí)間和日期(使用 Now 函數(shù))賦予變量 dtmStartTime。接下來(lái)是下面這行代碼:
idTimer = window.setTimeout("PausedSection", 5000, "VBScript")
無(wú)論您相信與否,這就是我們實(shí)現(xiàn) Sleep 方法函數(shù)的方式。我們使用 setTimeout 方法創(chuàng)建了一個(gè)定時(shí)器,其 ID 為 idTimer。正如您所看到的,我們將三個(gè)參數(shù)傳遞給 setTimeout:
? PausedSection。此參數(shù)為定時(shí)器到時(shí)后我們要運(yùn)行的子例程的名稱(chēng)。
? 5000。此參數(shù)為在調(diào)用 PausedSection 之前我們希望定時(shí)器等待的時(shí)間(以毫秒計(jì);5000 毫秒等于5 秒)。換句話(huà)說(shuō),這就是我們需要的暫停。如果需要將腳本暫停 30 秒,則可將此參數(shù)設(shè)置為 30000。
? VBScript。此參數(shù)是必需的,它只是告訴腳本 PausedSection 是用 VBScript 編寫(xiě)的。
即,我們單擊按鈕時(shí),Test 子例程將運(yùn)行。Test 子例程運(yùn)行時(shí),它將創(chuàng)建名為 idTimer 的定時(shí)器。idTimer 的唯一功能就是等待 5 秒然后調(diào)用子例程 PausedSection。明白了嗎?好的。
那么子例程 PausedSection 執(zhí)行什么操作?顯然,我們可以運(yùn)行任何希望的代碼;簡(jiǎn)單起見(jiàn),在此我們僅做兩件事情。首先,顯示一個(gè)消息框,它顯示我們單擊此按鈕的時(shí)間及消息框自身實(shí)際顯示在屏幕上的時(shí)間:
Msgbox dtmStartTime & vbCrLf & Now
若允許舍入誤差,這兩個(gè)時(shí)間的間隔應(yīng)為 5 秒。這重要嗎?當(dāng)然重要。請(qǐng)記住,在 PausedSection 子例程內(nèi)部首先發(fā)生的就是顯示此消息框。如果此消息框在我們單擊按鈕 5 秒之后顯示,則表明我們的腳本暫停了 5 秒。您可能會(huì)記起,這就是我們的最終目的。
我們?cè)?nbsp;PausedSection 子例程中要做的另外一件事情就是調(diào)用 clearTimeout 方法來(lái)有效地清除定時(shí)器:
window.clearTimeout(idTimer)
為什么這樣做?原因很簡(jiǎn)單:定時(shí)器是設(shè)計(jì)為永遠(yuǎn)運(yùn)行的。如果不清除定時(shí)器,每 5 秒鐘 idTimer 就將調(diào)用 PausedSection 子例程一次,因此每 5 秒鐘我們的這個(gè)小消息框就會(huì)在屏幕上彈出一次。我們真的不希望每 5 秒鐘就看到這樣的消息框,因此使用 clearTimeout 刪除定時(shí)器。
我們承認(rèn),這確實(shí)不如使用 Wscript.Sleep 5000 那么簡(jiǎn)單;這表明在您啟用和禁用定時(shí)器之前可能不得不稍稍掂量一番。因此,這或許帶點(diǎn)挑戰(zhàn),但是,別忘了,這不也是生命的全部意義所在嗎?
不,這不是一個(gè)反問(wèn)句。正如我們所說(shuō),我們一直致力于暫停 HTA;除此之外,我們就不知道生命到底是什么了。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 三级国产三级在线 | av日韩一区二区 | 成人视屏网站 | 国产草草视频 | 亚洲午夜电影 | bt 自拍 另类 综合 欧美 | h视频免费在线 | 中文字幕精品久久 | 免费在线成人网 | 久久久综合视频 | 亚洲片在线观看 | 黄色免费高清网站 | 国产在线a | 色综合777 | 成人免费福利网站 | 亚洲第一成网站 | 成人小视频在线播放 | 国产五区 | 国产69精品久久久久久久久久 | 国产一级一区二区三区 | 国产日产精品一区二区三区四区 | 免费观看视频网站 | 精品一区二区视频在线观看 | 国产羞羞网站 | 亚洲精品一区中文字幕 | 在线看日本| 黄色免费在线网址 | 欧美激情猛片xxxⅹ大3 | 久国久产久精永久网页 | 天天草天天干天天射 | 日本黄色免费观看视频 | 欧美日韩高清在线观看 | 久久久久久久久久久亚洲 | 羞羞网站入口 | 中文字幕网址 | 国人精品视频在线观看 | 午夜激情视频免费 | 国产一区二区视频在线播放 | 免费观看三级毛片 | 欧美成人一区二区三区 | 国产影视 |