1. 程式人生 > >雜項:自動關機/停止自動關機VBS指令碼

雜項:自動關機/停止自動關機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