杂项:自动关机/停止自动关机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

猜你喜欢

转载自blog.csdn.net/wen_ching_zhou/article/details/78967954
今日推荐