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

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

用vbs記錄屏幕保護(hù)程序的開(kāi)始時(shí)間和結(jié)束時(shí)間

2020-07-26 12:02:44
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
問(wèn):
您好,腳本專(zhuān)家!如何記錄屏幕保護(hù)程序的開(kāi)始時(shí)間和結(jié)束時(shí)間?
-- JS
答:
您好,JS。您知道,一位腳本專(zhuān)家(嘿,誰(shuí)說(shuō)“肯定是 Greg”?)年紀(jì)大得記得屏幕保護(hù)程序剛出現(xiàn)的日子。那時(shí),這類(lèi)腳本毫無(wú)意義。畢竟,屏幕保護(hù)程序啟動(dòng)后,每個(gè)人都神魂顛倒,從未想過(guò)讓它結(jié)束。事實(shí)上,作為計(jì)算機(jī)支持人員的這位腳本專(zhuān)家首先必須做的一件事就是在每個(gè)人的桌面上創(chuàng)建快捷方式,使他們能夠隨時(shí)啟動(dòng)“飛轉(zhuǎn)的小烤爐”。
那時(shí)人們很容易得到快樂(lè)。
啊,但是活在過(guò)去沒(méi)有意義,對(duì)吧?在今天的現(xiàn)代社會(huì)中,顯然不僅需要停止屏幕保護(hù)程序,還需要記錄停止的時(shí)間。明確這一點(diǎn)后,讓我們來(lái)看一看下面這個(gè) WMI 事件監(jiān)控腳本,它會(huì)跟蹤屏幕保護(hù)程序的每次啟動(dòng)和停止:
復(fù)制代碼 代碼如下:

strComputer = "." 
Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2") 
Set objEventSource = objWMIService.ExecNotificationQuery _ 
    ("SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_Process'") 
Do While True 
    Set objEventObject = objEventSource.NextEvent() 
        If Right(objEventObject.TargetInstance.Name, 4) = ".scr" Then 
        Select Case objEventObject.Path_.Class 
            Case "__InstanceCreationEvent" 
                Wscript.Echo "Screensaver " & objEventObject.TargetInstance.Name & _ 
                    " started: " & Now 
            Case "__InstanceDeletionEvent" 
                Wscript.Echo "Screensaver " & objEventObject.TargetInstance.Name & _ 
                    " ended: " & Now 
        End Select 
    End If 
Loop 
它看起來(lái)的確有點(diǎn)復(fù)雜,不是嗎?但是別慌:就設(shè)計(jì)而言,WMI 事件腳本總是看起來(lái)有點(diǎn)復(fù)雜。幸運(yùn)的是,這些腳本只是看起來(lái)復(fù)雜;您會(huì)看到,這些腳本實(shí)際上并不那么難理解。
注意:好吧,我們最好對(duì)最后一句陳述加以限定:只要您了解 WMI 事件構(gòu)成的基本思想,就不那么難理解。如果您還不了解,最好花點(diǎn)時(shí)間看看腳本編寫(xiě)第 2 周網(wǎng)絡(luò)廣播。這個(gè)網(wǎng)絡(luò)廣播將為您提供了理解今天專(zhuān)欄文章所需的所有背景信息。
好主意!盡管可能沒(méi)有有助于搞清楚我們的某一篇專(zhuān)欄文章的信息,但至少有助于搞清楚這個(gè)腳本代碼的意思。
這個(gè)特定腳本的開(kāi)始是以歷史悠久的方式連接到本地計(jì)算機(jī)上的 WMI 服務(wù)。通常到這里,我們要執(zhí)行 WMI 查詢(xún)以返回信息。正如您所看到的,在這個(gè)腳本中我們也要這么做,只是查詢(xún)看起來(lái)有點(diǎn)不同:
Set objEventSource = objWMIService.ExecNotificationQuery _
    ("SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_Process'")
不用說(shuō),這不是您所習(xí)慣編寫(xiě)的 WMI 查詢(xún)類(lèi)型,因?yàn)槲覀冋{(diào)用的是 ExecNotificationQuery 方法,而不是 ExecQuery。(為什么呢?因?yàn)橐O(jiān)控 WMI 事件,就必須使用 ExecNotificationQuery 方法。)今天我們無(wú)法詳細(xì)解釋這個(gè)查詢(xún),但我們可以說(shuō),我們要求 WMI 只要有 WMI 事件(創(chuàng)建、刪除、修改)發(fā)生,就立刻通知我們。這里只有一個(gè)問(wèn)題:我們只想當(dāng) TargetInstance(創(chuàng)建、刪除或修改的項(xiàng)目)是 Win32_Process 類(lèi)的實(shí)例時(shí)才得到通知。
注意:當(dāng)然,從技術(shù)角度來(lái)說(shuō),還有第二個(gè)問(wèn)題:我們只是每 5 秒鐘檢查一次新事件。如果屏幕保護(hù)程序啟動(dòng),3 秒鐘之后結(jié)束,我們很可能就不會(huì)得到通知了。
換句話說(shuō),假設(shè)創(chuàng)建了一個(gè)新文件。新文件是 Win32_Process 類(lèi)的實(shí)例嗎?不是;它是 CIM_DataFile 類(lèi)的實(shí)例。因此,我們不想得到通知。假設(shè)修改了一個(gè)服務(wù)。我們想要得到通知嗎?不想要,因?yàn)榉?wù)是 Win32_Service 類(lèi)的實(shí)例。好了,假設(shè)新進(jìn)程(例如屏幕保護(hù)程序)啟動(dòng)。我們想要得到通知嗎?當(dāng)然想要。別忘了,新進(jìn)程可是 Win32_Process 類(lèi)的實(shí)例。任何時(shí)候如果創(chuàng)建、刪除或修改進(jìn)程,我們都想得到通知。 
不過(guò),這些您已經(jīng)意識(shí)到了,對(duì)吧?
為了獲得這些通知,我們建立一個(gè)當(dāng) True 等于 True 時(shí)運(yùn)行的 Do 循環(huán):
Do While True
句子的語(yǔ)法確實(shí)有點(diǎn)怪異,但這個(gè)語(yǔ)法卻能夠使腳本不停運(yùn)行,并且不停監(jiān)控進(jìn)程的創(chuàng)建、刪除和修改,直到終止腳本或重新啟動(dòng)計(jì)算機(jī)。如果沒(méi)有這樣的循環(huán),腳本會(huì)通知我們屏幕保護(hù)程序何時(shí)啟動(dòng),但是,隨后腳本就會(huì)結(jié)束。結(jié)果,我們永遠(yuǎn)也不會(huì)得到屏幕保護(hù)程序何時(shí)結(jié)束的通知。
在循環(huán)內(nèi),我們首先要做的就是執(zhí)行下面這行代碼:
Set objEventObject = objEventSource.NextEvent()
我們所做的是告訴腳本等待,直到下一個(gè)我們所關(guān)心的事件發(fā)生。換句話說(shuō),腳本將停留在此行代碼上,直到有進(jìn)程被創(chuàng)建、刪除或修改。假設(shè)進(jìn)程始終不變,假設(shè)我們始終不創(chuàng)建、刪除或修改進(jìn)程。在這種情況下,腳本就會(huì)永遠(yuǎn)停在這兒,耐心等待。以防萬(wàn)一。
現(xiàn)在,我們知道您正在想什么。您正在想:“嗨,稍等一下。我們只關(guān)心屏幕保護(hù)程序。Microsoft Word 也在進(jìn)程中運(yùn)行。如果我們啟動(dòng) Microsoft Word,從而創(chuàng)建 Winword.exe 進(jìn)程的新實(shí)例,那不也會(huì)觸發(fā)通知嗎?” 
您說(shuō)對(duì)了:會(huì)觸發(fā)通知。接下來(lái)這行代碼就用來(lái)解決這個(gè)問(wèn)題。啟動(dòng) Word(或者任何可執(zhí)行文件,就這一點(diǎn)而言)確實(shí)都會(huì)發(fā)出通知。但我們可以使用下面這行代碼解決這個(gè)問(wèn)題:
If Right(objEventObject.TargetInstance.Name, 4) = ".scr" Then
在這里,我們使用 Right 函數(shù)檢查觸發(fā)通知的進(jìn)程的名稱(chēng)。如果名稱(chēng)中最右側(cè)的四個(gè)字符等于 .scr,我們便假定正在處理的是屏幕保護(hù)程序,因?yàn)槠聊槐Wo(hù)程序的名稱(chēng)類(lèi)似 Marquee.scr。如果名稱(chēng)中的最后四個(gè)字符不是 .scr,我們便只是循環(huán)一次,然后等待下一個(gè)事件發(fā)生。
那么,如果最后四個(gè)字符是 .scr 會(huì)怎樣?在這種情況下,我們只關(guān)心兩種可能:屏幕保護(hù)程序啟動(dòng)或屏幕保護(hù)程序結(jié)束。(我們并不關(guān)心是否有人修改屏幕保護(hù)程序的屬性。)為處理這兩種可能,我們?cè)O(shè)置一個(gè) Select Case 塊,用于檢查事件實(shí)例的 Class:
Select Case objEventObject.Path_.Class
如果 Class 等于 __InstanceCreationEvent,則意味著已創(chuàng)建新進(jìn)程(即新屏幕保護(hù)程序)。在第一個(gè) Case 語(yǔ)句中,我們檢查 Class 是否等于 __InstanceCreationEvent。如果等于,我們便回顯如下事實(shí):特定屏幕保護(hù)程序(使用進(jìn)程名稱(chēng)表示)在特定時(shí)間(使用 VBScript 函數(shù) Now)啟動(dòng):
Case "__InstanceCreationEvent"
    Wscript.Echo "Screensaver " & objEventObject.TargetInstance.Name & " started: " & Now
意思清楚了,對(duì)吧?現(xiàn)在,假設(shè)屏幕保護(hù)程序已結(jié)束,這就會(huì)導(dǎo)致刪除屏幕保護(hù)程序進(jìn)程。為處理這種可能,我們檢查 __InstanceDeletionEvent 類(lèi)是否有新實(shí)例。如果發(fā)生屬于該類(lèi)的事件(表示已刪除屏幕保護(hù)程序進(jìn)程),我們便回顯如下事實(shí) - 指定的屏幕保護(hù)程序在指定時(shí)間停止:
Case "__InstanceDeletionEvent"
    Wscript.Echo "Screensaver " & objEventObject.TargetInstance.Name & " ended: " & Now
至此您已實(shí)現(xiàn)了您的目的。運(yùn)行此腳本后,會(huì)返回類(lèi)似下面的信息:
Screensaver Script Center.scr started: 2/9/2006 9:11:07 AM
Screensaver Script Center.scr ended: 2/9/2006 9:11:17 AM
注意:Script Center.scr 到底是什么?下載它,然后自己看。
我們還要補(bǔ)充兩件事。第一,最好在 Cscript 下的命令窗口中運(yùn)行此腳本,也就是說(shuō),要開(kāi)始監(jiān)控,請(qǐng)打開(kāi)命令窗口,然后鍵入類(lèi)似下面的命令(當(dāng)然,具體內(nèi)容視腳本名稱(chēng)而定):
cscript screensaver_monitor.vbs
第二,正如我們前面所指出的,此腳本設(shè)計(jì)為永遠(yuǎn)運(yùn)行。另一方面,什么事都不會(huì)永遠(yuǎn)持續(xù)下去,是吧?如果要停止監(jiān)控,我們只需按 Ctrl+C,關(guān)閉命令窗口,或者終止 CScript.exe 進(jìn)程。記住,腳本專(zhuān)家決不會(huì)讓您陷于沒(méi)有出口的無(wú)限循環(huán)中。(您知道嗎:這對(duì)我們這的工作真是形容得非常恰當(dāng)。)
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 四季久久免费一区二区三区四区 | 日本成人在线播放 | 欧美不卡视频在线观看 | 禁漫天堂久久久久久久久久 | 一级裸体视频 | 免费视频www在线观看 | 在线观看一二三 | 国产一级一区 | 国产精品夜色视频一级区 | 一区二区三区视频在线观看 | 狠狠色成色综合网 | 色综合一区二区 | 日本精品婷婷久久爽一下 | 亚洲婷婷日日综合婷婷噜噜噜 | 亚洲精品日韩色噜噜久久五月 | 久久久一区二区三区精品 | 国产亚洲精品久久久久久大师 | 91美女啪啪 | 在线看一区二区三区 | 久久成人动漫 | 欧美另类综合 | 国产中出在线观看 | 日本在线免费观看视频 | 久久久精品精品 | 龙的两根好大拔不出去h | 毛片免费网 | 久久久日韩av免费观看下载 | 午夜国产精品成人 | 亚洲 综合 欧美 动漫 丝袜图 | 色婷婷av一区二区三区久久 | 全黄毛片 | 成人富二代短视频 | 老司机免费福利午夜入口ae58 | 午夜精品老牛av一区二区三区 | 欧美日本中文字幕 | 久久久精品福利 | 成人黄色小视频在线观看 | 久久福利精品 | 91精品国产一区二区三区四区在线 | 91精品国产九九九久久久亚洲 | 欧美日韩a∨毛片一区 |