none
Как перехватить WMI-событие RRS feed

  • Вопрос

  • Собственно нужно перехватить событие компъютер вышел из режима сна или из режима гибернации. Что-то у меня не получается. Хочу сделать на Javascript. Буду признателен за любую подсказку. Спасибо

    8 октября 2014 г. 18:25

Все ответы

    • Изменено KazunEditor 8 октября 2014 г. 18:54
    8 октября 2014 г. 18:54
    Отвечающий
  • Все это видел. Не получается что-то

    Вот кусок моего кода

    <object id="mysink" style="display:none" classid="clsid:75718C9A-F029-11D1-A1AC-00C04FB6C223"></object>

    <script>
     var locator = new ActiveXObject("WbemScripting.SWbemLocator");
     var objWMIService = locator.ConnectServer(null, "root\\cimv2");

     var wql = "SELECT * FROM __InstanceModificationEvent Within 2 WHERE TargetInstance ISA 'Win32_PowerManagementEvent'";

     objWMIService.ExecNotificationQueryAsync(mysink, wql);

    </script>

    <script language="javascript" type="text/javascript" for="mysink" event="OnObjectReady(objObject, objAsyncContext)">

    //Здесь обработчик

    </script>

    Не обрабатывает.

    Что не так?

    8 октября 2014 г. 19:59
  • PS > Register-WmiEvent -Query "select * from Win32_PowerManagementEvent"  -SourceIdentifier "EVT"
    -Action {Write-Host "SLEEP"; [console]::Beep(500,500)}
    
    Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
    --     ----            -------------   -----         -----------     --------             -------
    2      EVT                         NotStarted    False                                Write-Host "SLEEP"; [c...
    
    
    PS > rundll32.exe powrprof.dll,SetSuspendState 0,1,0
    PS > SLEEP
    PS > SLEEP

    Проверил, работает.
    • Изменено KazunEditor 9 октября 2014 г. 5:05
    9 октября 2014 г. 5:05
    Отвечающий
  • Мой код работает?
    9 октября 2014 г. 5:08
  • Мой код работает?

    Не знаю, мне не интересен Javascript.
    9 октября 2014 г. 5:16
    Отвечающий
  • Запишите это как test.html и запустите под Интернет Эксплорер

    <html>
    < head>
    < title>Test</title>
    < /head>
    < body>
    < object id="mysink" style="display:none" classid="clsid:75718C9A-F029-11D1-A1AC-00C04FB6C223"></object>
    < script>
     var locator = new ActiveXObject("WbemScripting.SWbemLocator");
     var objWMIService = locator.ConnectServer(null, "root\\cimv2");
    // var wql = "SELECT * FROM __InstanceModificationEvent Within 2 WHERE TargetInstance ISA 'Win32_PowerManagementEvent'";
     var wql = "SELECT * FROM __InstanceModificationEvent Within 2 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = 'notepad.exe'";
     objWMIService.ExecNotificationQueryAsync(mysink, wql);
    < /script>
    < script language="javascript" type="text/javascript" for="mysink" event="OnObjectReady(objObject, objAsyncContext)">
    alert("EVENT")
    < /script>
    < /body>
    < /html>

    Сработает, после того как вы запустите notepad.exe.

    Если раскомментировать // var wql = "SELECT * FROM __InstanceModificationEvent Within 2 WHERE TargetInstance ISA 'Win32_PowerManagementEvent'";

    и закомментировать  var wql = "SELECT * FROM __InstanceModificationEvent Within 2 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = 'notepad.exe'";

    скрипт не работает. Почему? Очень нужна помощь

    9 октября 2014 г. 15:21