1 (изменено: Poltergeyst, 2010-04-25 11:08:40)

Тема: VBScript: отслеживание перехода в спящий режим

Без гарантий. Используете на свой страх и риск.
Скрипт предназначен для отслеживания перехода компьютера в спящий/ждущий режим, а также события пробуждения из этих режимов.
После запуска скрипта переведите компьютер в спящий/ждущий режим, а через некоторое время пробудите компьютер, например движением мыши и просмотрите полученное сообщение протокола.
Lang: VBScript
ОС WinMe

'--------- Без гарантий! Используете на свой страх и риск.----------
'-------------------------------------------------------------------
'Скрипт предназначен для обработки события управления питанием клиентского 
'компьютера и отслеживает событие перехода в спящий/ждущий режим, а также 
'событие пробуждения компьютера из этих режимов.
'-------------------------------------------------------------------
'После запуска скрипта переведите компьютер в спящий/ждущий режим, а через 
'некоторое время пробудите компьютер, например движением мыши и просмотрите 
'полученное сообщение протокола.
'-------------------------------------------------------------------
'Lang: VBScript
'ОС WinMe
'-------------------------------------------------------------------
 EventStr="[Информация]"
 HoldScript = True

'[Создание запроса WMI на обработку события]
'-------------------------------------------------------------------
 Set objService = GetObject("winmgmts:\\.\Root\CIMV2")
 Set objSink = WScript.CreateObject("WbemScripting.SWbemSink", "Sink_")

 objService.ExecNotificationQueryAsync _
 objSink, _
 "SELECT * FROM Win32_PowerManagementEvent WITHIN 1"
'-------------------------------------------------------------------
 MsgBox "Отслеживание включено.", vbSystemModal Or vbInformation, "Power Management"

 Do
 WScript.Sleep 100
 If Not HoldScript Then Exit Do
 Loop

 objSink.Cancel()
 WScript.Sleep(500)
 Set objService = Nothing
 Set objSink = Nothing
 MsgBox "Работа завершена.", vbSystemModal Or vbInformation, "Power Management"
 WScript.Quit()

'[Обработка события управления энергопитанием]
'-------------------------------------------------------------------
Sub Sink_OnObjectReady(objEvent, objContext)
    
    e = CInt(objEvent.EventType)
    t = Time 'С точностью до 1 сек
    '-----------------------------------------------------------
    Select Case e

    Case 4    'Код перехода в ждущий/спящий режим
        EventStr = EventStr & vbCRLF & vbCRLF & "Переход в спящий/ждущий режим " & "_" & t

    Case 7    'Код возврата из ждущего/спящего режима
        EventStr = EventStr & vbCRLF & "Возврат из спящего/ждущего режима " & "_" & t

        If MsgBox(EventStr & vbCRLF & vbCRLF & "Остановить отслеживание?", _
            vbSystemModal Or vbInformation Or vbYesNo, _
            "Протокол события") = vbYes Then HoldScript = False

    End Select
    '-----------------------------------------------------------    

End Sub
'-------------------------------------------------------------------

2

Re: VBScript: отслеживание перехода в спящий режим

Без гарантий. Используете на свой страх и риск.
Скрипт предназначен для обновления подключения сетевого соединения после выхода компьютера из спящего режима. Автор: alexii.
Lang: VBScript

Option Explicit

Const PowerManagementEventType_ResumeFromSuspend = 7

Dim objSWbemServicesEx
Dim objSWbemEventSource_Win32_PowerManagementEvent
Dim objSWbemObjectEx_Win32_PowerManagementEvent

Dim strNetworkConnectionsName


strNetworkConnectionsName = "Подключение по локальной сети"

Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set objSWbemEventSource_Win32_PowerManagementEvent = _
    objSWbemServicesEx.ExecNotificationQuery("SELECT * FROM Win32_PowerManagementEvent")

Do
    Set objSWbemObjectEx_Win32_PowerManagementEvent = objSWbemEventSource_Win32_PowerManagementEvent.NextEvent
    
    If objSWbemObjectEx_Win32_PowerManagementEvent.EventType = PowerManagementEventType_ResumeFromSuspend Then
        If ReconnectNetworkConnection(strNetworkConnectionsName) Then
            WScript.Echo "Соединение [" & strNetworkConnectionsName & "] переподключено успешно."
        Else
            WScript.Echo "Не удалось переподключить соединение [" & strNetworkConnectionsName & "]."
        End If
    End If
Loop

Set objSWbemObjectEx_Win32_PowerManagementEvent    = Nothing
Set objSWbemEventSource_Win32_PowerManagementEvent = Nothing
Set objSWbemServicesEx                             = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
' Функция: ReconnectNetworkConnection
' 
' Аргументы
'    strNetworkConnectionsName: Имя сетевого соединения, например "Подключение по локальной сети"
'=============================================================================
Function ReconnectNetworkConnection(strNetworkConnectionsName)
    Const NetworkConnections = &H31
    
    
    Dim strVerbName_Enable
    Dim strVerbName_Disable
    
    Dim objShell
    Dim objFolder_NetworkConnections
    Dim objFolderItem
    Dim objFolderItem_NetworkConnections
    
    Dim objVerb
    
    
    strVerbName_Enable        = "&Включить"                     ' En&able для англ. версии ОС
    strVerbName_Disable       = "&Отключить"                    ' Disa&ble для англ. версии ОС
    
    Set objShell = WScript.CreateObject("Shell.Application")
    Set objFolder_NetworkConnections = objShell.Namespace(NetworkConnections)
    
    If objFolder_NetworkConnections Is Nothing Then
        WScript.Echo "Virtual Folder [Network Connections] not found."
        
        ReconnectNetworkConnection = False
        
        Set objShell                         = Nothing
        
        Exit Function
    End If
    
    For Each objFolderItem In objFolder_NetworkConnections.Items
        If UCase(objFolderItem.Name) = UCase(strNetworkConnectionsName) Then
            Set objFolderItem_NetworkConnections = objFolderItem
            
            Exit For
        End If
    Next
    
    If objFolderItem_NetworkConnections Is Nothing Then
        WScript.Echo "Connection [" & strNetworkConnectionsName & "] not found."
        
        ReconnectNetworkConnection = False
        
        Set objFolder_NetworkConnections     = Nothing
        Set objShell                         = Nothing
        
        Exit Function
    End If
    
    ' Если есть соединение - отключаем его
    For Each objVerb In objFolderItem_NetworkConnections.Verbs
        If objVerb.Name = strVerbName_Disable Then
            objVerb.DoIt
            
            Exit For
        End If
    Next
    
    ' Ждём, пока не будет возможности подключения соединения, и подключаем его
    Do
        For Each objVerb In objFolderItem_NetworkConnections.Verbs
            If objVerb.Name = strVerbName_Enable Then
                objVerb.DoIt
                
                Exit Do
            End If
        Next
        
        WScript.Sleep 100
    Loop
    
    ' Ждём, пока не будет возможности отключения соединения, и выходим
    Do
        For Each objVerb In objFolderItem_NetworkConnections.Verbs
            If objVerb.Name = strVerbName_Disable Then
                Exit Do
            End If
        Next
        
        WScript.Sleep 100
    Loop
    
    ReconnectNetworkConnection = True
    
    Set objFolderItem_NetworkConnections = Nothing
    Set objFolder_NetworkConnections     = Nothing
    Set objShell                         = Nothing
End Function
'=============================================================================