国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - VBS - 在 HTA 中暫停腳本的方法

在 HTA 中暫停腳本的方法

2020-07-07 12:29腳本之家 VBS

如果您不熟悉 HTA,您首先想到的可能是“使用 Wscript.Sleep 即可”。(順便說一句,如果您不熟悉 HTA,可以瀏覽 HTA Developers Center(英文)。)這是個好主意,但卻無法實現。

問:
您好,腳本專家!如何在 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 方法呢?這有必要問嗎?



我們的 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;除此之外,我們就不知道生命到底是什么了。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久成人中文字幕 | 国产在线一区二区 | 中文字幕成人 | 黄色网页免费看 | 国产一区在线视频观看 | 成人av片在线观看 | 大香一网| 午夜电影福利 | 91精品国产91久久久久久最新 | 成人免费视频网站在线看 | 伊人欧美在线 | 男人午夜视频在线观看 | 国产一区二区三区四区hd | 亚洲欧洲视频 | 免费的av网站 | 91免费视频网站 | 亚洲一区二区在线 | 欧美极品视频 | 亚洲精品一区久久久久久 | 国产免费啪 | av在线一区二区三区 | 久久精品一区二区三区四区 | 嫩草网址| 91九色视频国产 | 欧美日韩精品在线 | 三级成人在线 | av手机在线电影 | 国产福利91精品一区二区三区 | 欧美日韩网站 | 国产精品久久久久久久久久久久冷 | 久久美 | 黄色视屏在线免费观看 | 日韩一二三| 涩涩涩久久久成人精品 | 黄在线免费观看 | 福利视频一区二区三区 | 欧美日一区二区 | 看亚洲a级一级毛片 | 日韩精品一区不卡 | 国产成人一区 | 伊人伊成久久人综合网站 |