雜項:自動關機/停止自動關機VBS腳本

‘監控進程並關閉進程腳本

‘原出處是哪已經不知道了 反正這段是copy的
On Error Resume Next
strComputer = “.”
arrTargetProcs = Array(“wscript.exe”)
‘數組裏爲要監視的進程名 關機進程是用vbs開的 進程名是wscript.exe
Set SINK = WScript.CreateObject(“WbemScripting.SWbemSink”,”SINK_”)
Set objWMIService = GetObject(“winmgmts:” & _
“{impersonationLevel=impersonate}!\” & strComputer & “\root\cimv2”)
objWMIService.ExecNotificationQueryAsync SINK, _
“SELECT * FROM _InstanceCreationEvent WITHIN 1 ” &
“WHERE TargetInstance ISA ‘Win32_Process’”
Wscript.Echo “Are monitoring processes 監控關機進程 …”
Do
WScript.Sleep 1000
Loop
*****************************************************************
Sub SINK_OnObjectReady(objLatestEvent, objAsyncContext)
‘Trap asynchronous events.
For Each strTargetProc In arrTargetProcs
If LCase(objLatestEvent.TargetInstance.Name) = LCase(strTargetProc) Then
intReturn = objLatestEvent.TargetInstance.Terminate
’ 下面是彈出一個對話框
‘If intReturn = 0 Then
’ Wscript.Echo “Time: ” & Now & “, Succeed!” & chr(9) & _
’ “Name: ” & objLatestEvent.TargetInstance.Name
‘Else
‘Wscript.Echo “Time: ” & Now & “, Failed!” & chr(9) & _
’ “Name: ” & objLatestEvent.TargetInstance.Name
‘End If

End If
Next
End Sub

先開啓監控檢測,則關機腳本開啓後將被立即kill


‘關機腳本 並確保工作文檔有被正常保存
On Error Resume Next
Dim objShell,intReturn,mbFinished,moWindow
Set objShell = CreateObject(“Wscript.Shell”)
mbFinished = False

Call main()

‘==================================主程序結束=============================================

Sub Main()
Do
time1=time

intReturn = objShell.Popup("系統即將在30分鐘後進入關機狀態,如需繼續使用電腦,請點擊【確定】",1805, "系統將在30分鐘後進入關機狀態......")

time2=time
time3=DateDiff("s",time1,time2)

If time3>1800 Then
    Go_Sleep()
    Exit do
Else 
    Set moWindow = WScript.CreateObject("InternetExplorer.Application","IE_")
    Call Wait_Sleep()
End If 

Loop
End Sub

‘================主程序完成================

Sub Go_Sleep()

Const Shutdown_Mod = 5 ‘Forced Shutdown (1 + 4)
Set objNet = WScript.CreateObject( “WScript.Network” )
Set objWMIService = GetObject(“winmgmts:{impersonationLevel=impersonate,” & _
“(Shutdown)}!\” & objNet.ComputerName & “\root\cimv2”) ‘獲得對象
Set colOSes = objWMIService.ExecQuery(“SELECT * FROM Win32_OperatingSystem”)
For Each objOS In colOSes ‘只可能有一個 objOS 在colOSes集合中
intReturn = objOS.Win32Shutdown(Shutdown_Mod)
If intReturn <> 0 Then
msgbox “您有文檔未保存,關機操作失敗”
End If
Next

WScript.Quit

End Sub

Sub Wait_Sleep()
dim i
mbFinished = False
i=0

moWindow.Navigate "about:blank"
With moWindow.Document
    .Write "<body scroll=no style='background-color:#d4d0c8;font-size:9pt'>10分鐘後進入關機狀態,您是否需要取消今天的關機任務?<br>點擊【加班中,今天不關機了】將取消關機。還剩餘<font id='str'>600</font>秒進入關機狀態<br><br><div align='center'><input type='submit' value='加班中,今天不關機了' Width='10px' id='btnOK'/>&nbsp;&nbsp;&nbsp;&nbsp;<input type='button' value='1小時後再決定' class='cancel' id='btnCancel'/></div></body>"
        .Title ="取消關機"
End With
moWindow.Document.Close

With moWindow
    .Toolbar = False
    .Statusbar = False
    .Menubar = False
    .Resizable = False
    .Width =500
    .Height=130
    .left= 350
    .top= 350
    Set .document.all.btnOK.onclick = GetRef("evtOK")
    Set .document.all.btnCancel.onclick = GetRef("evtCancel")
    .Visible = true
End With


Do
        WScript.Sleep 1000
    i=i+1
    if i<600 then
        moWindow.Document.All.str.innerHTML = 600-i
            If mbFinished Then Exit Do
    else
        Call Go_Sleep()
    end if
Loop

End Sub

Sub evtOK
mbFinished = True
moWindow.Quit
Wscript.Quit
End Sub

Sub evtCancel
mbFinished = True
moWindow.Visible = false
moWindow.Quit
WScript.Sleep(3600000)
End Sub

Sub IE_onQuit
mbFinished = True
End Sub

發佈了38 篇原創文章 · 獲贊 4 · 訪問量 7523
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章