Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Отловить простой системы и выход из него (http://forum.oszone.net/showthread.php?t=176505)

Morpheus 25-05-2010 03:39 1420439

Отловить простой системы и выход из него
 
Даже не знаю с какого боку зайти уже. Что требуется:
При простое = 600s (в этот момент гасится монитор) - запуск батника.
При выходе из простоя - запуск другого батника.

Пробовали реализовать это с помощью коллективного разума средствами системы - не вышло.
Т.е. если бы что-то писалось в журнал при, допустим, гашении и включении монитора, то можно было бы завесить на это событие задание в планировщике, но ничего не пишется...
Удалось реализовать только так: в св-вах заставки ставим время и флажок "Начинать с экрана входа в систему", в этом случае происходит блокировка, а на блокировку/разблокировку легко назначается нужное задание в планировщике. Но это не удобно, т.к. надо выбирать учётную запись при разблокировке.
Под простоем понимается отсутствие нажатий на клавиши, при любой загруженности процессора и HDD,
а не так, как это себе представляет планировщик :)
Условия простоя
Можно выбрать условие, позволяющее запуск задания только в том случае, если на момент активации триггера компьютер находится в состоянии простоя в течение указанного времени. При настройке этого условия также необходимо задать время ожидания (после активации триггера задания), по истечению которого компьютер будет возвращаться в состояние простоя.

Служба планировщика заданий проверяет, не находится ли компьютер в состоянии простоя, каждые 15 минут. Состоянием простоя считается состояние компьютера, при котором запущена заставка. Если заставка не запускается, считается, что компьютер находится в состоянии простоя при 0% использования процессора и 0% активности диска в течение 90% из последних 15 минут при отсутствии ввода команд с помощью клавиатуры или мыши. Если служба планировщика заданий обнаруживает, что компьютер находится в состоянии простоя, служба начинает ожидать ввода команды пользователем, чтобы отметить конец состояния простоя.

Если задание запускается только в том случае, если компьютер находится в состоянии простоя в течение 30 минут, и задание в течение 10 минут ожидает, пока компьютер перейдет в состоянии простоя, то задание запуститься через 5 минут только в том случае, если на момент активации триггера компьютер находился в состоянии простоя в течение 25 минут. Задание не будет запущено, если компьютер переходит в состояние простоя через 5 минут после активации триггера.

Любые идеи?
ОС: Windows 7, на всякий случай.

amel27 25-05-2010 10:58 1420591

Morpheus, как вариант - сделать привязку к событию вкл./выкл. хранителя экрана статья:
Running a Program from the Command Line Based on an Event, MOF-файл:

Код:

#pragma namespace ("\\\\.\\Root\\subscription")

// Создание экземпляра потребителя событий командной строки
// для запуска батника "c:\\TEST\scrstart.cmd", и
// присвоение ему псевдонима $SCRSTARTCONSUMER

instance of CommandLineEventConsumer as $SCRSTARTCONSUMER
{
        Name = "ScreenSaverStartConsumer";
        CommandLineTemplate = "c:\\TEST\\scrstart.cmd %TargetInstance.Name%";
        WorkingDirectory = "c:\\TEST";
};   

// Создание экземпляра потребителя событий командной строки
// для запуска батника "c:\\TEST\scrstop.cmd",
// присвоение ему псевдонима $SCRSTOPCONSUMER

instance of CommandLineEventConsumer as $SCRSTOPCONSUMER
{
        Name = "ScreenSaverStopConsumer";
        CommandLineTemplate = "c:\\TEST\\scrstop.cmd %TargetInstance.Name%";
        WorkingDirectory = "c:\\TEST";
};   

// Создание экземпляра фильтра событий
// для создания нового процесса *.SCR
// и присвоение ему псевдонима $SCRSTARTFILTER

instance of __EventFilter as $SCRSTARTFILTER
{
    Name = "ScreenSaverStartFilter";
    EventNamespace = "\\\\.\\root\\cimv2"; 

    Query = "SELECT * FROM __InstanceCreationEvent WITHIN 5 "
            "WHERE TargetInstance ISA \"Win32_Process\" "
            "AND TargetInstance.Name LIKE \"%%.scr\"";
    QueryLanguage = "WQL";
};

// Создание экземпляра фильтра событий
// для удаления процесса *.SCR
// и присвоение ему псевдонима $SCRSTOPFILTER

instance of __EventFilter as $SCRSTOPFILTER
{
    Name = "ScreenSaverStopFilter";
    EventNamespace = "\\\\.\\root\\cimv2"; 

    Query = "SELECT * FROM __InstanceDeletionEvent WITHIN 5 "
            "WHERE TargetInstance ISA \"Win32_Process\" "
            "AND TargetInstance.Name LIKE \"%%.scr\"";
    QueryLanguage = "WQL";
};

// Создание экземпляра связи между фильтром и подписчиком
// события запуска хранителя экрана

instance of __FilterToConsumerBinding
{
    Consumer = $SCRSTARTCONSUMER;
    Filter = $SCRSTARTFILTER;
};

// Создание экземпляра связи между фильтром и подписчиком
// события остановки хранителя экрана

instance of __FilterToConsumerBinding
{
    Consumer = $SCRSTOPCONSUMER;
    Filter = $SCRSTOPFILTER;
};

пример команды компиляции: "MOFComp SCR.MOF"

P.S. Windows 7 под рукой нет, проверял на 2003

Morpheus 25-05-2010 12:33 1420648

amel27, это на С++? Боюсь, что не имея даже базовых знаний С++, это для меня сложновато будет.
Проще варианты возможны?

Vadikan 25-05-2010 12:45 1420657

Morpheus, подошел со стороны заставки...

How Can I Log the Start Time and the End Time of the Screensaver?
http://blogs.technet.com/b/heyscript...reensaver.aspx

Если можно отследить время запуска и остановки заставки, то можно и событие на это повесить... если знать WMI :)

amel27 25-05-2010 13:25 1420697

Цитата:

Цитата Morpheus
это на С++? »

нет, это MOF - язык описания WMI-объектов, можно то же сделать и через VBS, но будет еще длинней, а тут ничего лишнего - только заменить мои батники/каталоги на свои (C:\TEST\...), вот еще похожая тема: Настройка сообщений

Цитата:

Цитата Vadikan
How Can I Log the Start Time and the End Time of the Screensaver? »

а я отуда SELECT и дёрнул, :) но тому скрипту нужно постоянно крутиться, а тут приготовил батники , запрограммировал WMI - всё остальное сделает система

Morpheus 25-05-2010 13:35 1420707

Vadikan, amel27, спасибо! Пробую разобраться, вопросы будут возникать, наверняка :)

Iska 25-05-2010 15:13 1420795

По-хорошему, надо бы ещё учитывать командную строку запуска *.scr, точнее, параметры его запуска То бишь, желательно бы добавить в MOF в условие ещё один предикат LIKE на параметр « /s».

Morpheus 25-05-2010 19:22 1420950

Голова уже трещит... Помогайте, плз! :)
  1. Копирую текст в текстовый файл, называю его SCR.MOF.
  2. Заменяю пути.
  3. Компилирую:
    Цитата:

    C:\Windows\system32>MOFComp D:\SCR.MOF
    Microsoft (R) MOF Compiler Version 6.1.7600.16385
    Copyright (c) Microsoft Corp. 1997-2006. All rights reserved.
    Parsing MOF file: D:\SCR.MOF
    MOF file has been successfully parsed
    Storing data in the repository...
    WARNING: File D:\SCR.MOF does not contain #PRAGMA AUTORECOVER.
    If the WMI repository is rebuilt in the future, the contents of this MOF file will not be included in the new WMI repository.
    To include this MOF file when the WMI Repository is automatically reconstructed, place the #PRAGMA AUTORECOVER statement on the first line of the MOF file.
    Done!
Правильно? Что дальше?

zonderz 25-05-2010 20:16 1420974

Morpheus,

вопрос: а зачем вам вообще скринсэйвер? Зачем вы свою задачу к нему подвязываете? Без него нельзя никак обойтись?

Morpheus 25-05-2010 20:32 1420985

zonderz, а с какой целью интересуетесь?
Цитата:

Цитата zonderz
вопрос: а зачем вам вообще скринсэйвер? Зачем вы свою задачу к нему подвязываете? Без него нельзя никак обойтись? »

Заставка мне вообще не нужна, задача описана в шапке.
Или имеется в виду, что будет в батниках? Сейчас задачи одни (что-то подгрузить, что-то выгрузить), какие будут завтра, пока не знаю. Но знать, как это делается полезно в любом случае.

Iska 25-05-2010 20:40 1420995

Цитата:

Цитата Morpheus
Правильно? Что дальше? »

Вроде бы всё. Осталось наполнить Вашим содержанием скрипты «c:\TEST\scrstart.cmd» и «c:\TEST\scrstop.cmd». Не помню, надо ли ещё дополнительно перегружаться/перезапускать службу WMI или же новый MOF сразу будет задействован.

zonderz 25-05-2010 20:48 1421008

Morpheus,

Цитата:

Цитата Morpheus
а с какой целью интересуетесь? »

блин, вы тут вообще-то за помощью обращаетесь. helper'ы имхо имеют право задавать любые наводящие вопросы.

вас устроит такое? :

запускаете прогу (висит в трее), если клавой или мышкой не двигали 10 минут (можно назначить время) система уходит в режим простоя (тухнет монитор), предварительно запустив 1 командный файл (можно назначить путь и имя программы). Далее после нажатия клавиши или движения мышью система "просыпается", запуская 2 командный файл. и т.д . до бесконечности

Morpheus 25-05-2010 20:56 1421014

Iska, содержимое на месте, заставку включал, машину перегружал - реакция ноль.

zonderz, вполне, но надо пробовать.
Цитата:

Цитата zonderz
запускаете прогу (висит в трее), если клавой или мышкой не двигали 10 минут (можно назначить время) система уходит в режим простоя (тухнет монитор), предварительно запустив 1 командный файл (можно назначить путь и имя программы). Далее после нажатия клавиши или движения мышью система "просыпается", запуская 2 командный файл. »

Цитата:

Цитата Morpheus
Что требуется:
При простое = 600s (в этот момент гасится монитор) - запуск батника.
При выходе из простоя - запуск другого батника. »


zonderz 25-05-2010 22:01 1421074

Навскидку:

http://forum.oszone.net/attachment.p...3&d=1274818480

Morpheus 25-05-2010 22:41 1421107

zonderz, уже ближе к делу :)
Через 20 сек. запускается первая команда, монитор не отключается, при движении мыши запускается вторая команда.
Хотелось бы: чтобы монитор всё-таки отключался (хотя ладно, это я прописал в первом батнике) и чтобы она пряталась в трей. Кнопку "Exit" можно сделать побольше, а то не весь экран занимает :)

Iska 25-05-2010 23:20 1421121

Morpheus, ну, не знаю. У меня под XP SP3 RU код из поста #2 работает, как и заявлено [в том числе и ручном запуске *.scr, и на просмотре :)], проверялось с помощью Process Monitor. Да, и для начала работы подписчика оказалось достаточно только скомпилировать *.mof, не потребовалось ни рестарта службы, ни перезагрузки.

P.S. Как у Вас заработает, всё ж добавьте в оба запроса проверку на «/s»:
Код:

    Query = "SELECT * FROM __InstanceCreationEvent WITHIN 5 "
            "WHERE TargetInstance ISA \"Win32_Process\" "
            "AND TargetInstance.Name LIKE \"%%.scr\" "
            "AND TargetInstance.CommandLine LIKE \"%%.scr /s\"";

а то будет срабатывать даже на вкладке заставки свойств экрана.

P.P.S.
Цитата:

На мой взгляд, лучший вариант — написание самого хранителя экрана. То бишь, перевод своего кода с VBScript на, к примеру, AutoIt (дабы осталась поддержка OLE Automation + лицензионная чистота, потому про «большой» VB/VB.Net не поминаю) и добавление кода, реализующего минимальную обработку ключей запуска этого хранителя экрана («/c», «/s», «/p») и остановку по приходу события от клавиатуры/мыши. Ну, а в нём уже делай, что хочешь, хоть внутри себя, хоть внешним приложением — никто мешать не будет, ведь он сам и есть хранитель экрана. Примерно на такой основе сделан хранитель экрана Avast :).

Morpheus 25-05-2010 23:30 1421128

Iska, ок, спасибо! Добавлю, если заработает :) Я то в этом совсем ни бум-бум...
М.б. в этом причина неработоспособности?
Цитата:

Starting with Windows Vista, CommandLineEventConsumer cannot be used to start a process that runs interactively.
Windows Server 2003 and Windows XP: CommandLineEventConsumer can start a process that runs interactively.
http://msdn.microsoft.com/en-us/libr...49(VS.85).aspx

zonderz 26-05-2010 00:15 1421169

Вложений: 1
Цитата:

Цитата Morpheus
Кнопку "Exit" можно сделать побольше, а то не весь экран занимает »

:
Цитата:

Цитата Morpheus
Хотелось бы: чтобы монитор всё-таки отключался »

))

отключается. но в виртуалке не отключится :)) добавил паузу при выходе из сна и собственно сон (не просто отключение моника)

updated: сработало даже в виртуали! моник не отключился :)))))) но виртуалка ушла в шлубокий сон и потом все как по программе... удачи (за сим откланяюсь - у вас исходники)

Morpheus 26-05-2010 00:35 1421189

zonderz, спасибо! В трей её никак?

zonderz 26-05-2010 00:50 1421195

http://forum.oszone.net/attachment.p...1&d=1274820711

в трее - кол-во минут бездействия

Morpheus 26-05-2010 00:55 1421201

zonderz, спасибо!
Цитата:

Цитата zonderz
в трее - кол-во минут бездействия »

не обновляется :)

amel27 26-05-2010 04:09 1421243

Morpheus, проверил дома - на Win7 работает, компилировал в режиме админа, текст батников:
Код:

Echo ------------>>%~n0.log
Echo Date/Time  : %DATE% %TIME%1>>%~n0.log
Echo ScreenSaver: %~1>>%~n0.log
Echo ------------>>%~n0.log
SET>>%~n0.log
Echo.>>%~n0.log

Цитата:

Цитата Morpheus
М.б. в этом причина неработоспособности? »

смысл в том, что батники запускаются под системной учеткой без доступа к рабочему столу, т.е. если нужен доступ к окнам или учетка пользователя, то этот способ не подойдет

MOF-файл для отключения мониторинга/удаления объектов, созданных MOF из поста #2:
Код:

#pragma namespace ("\\\\.\\Root\\subscription")

#pragma deleteinstance
    ("CommandLineEventConsumer.Name='ScreenSaverStartConsumer'", FAIL)

#pragma deleteinstance
    ("CommandLineEventConsumer.Name='ScreenSaverStopConsumer'", FAIL)

#pragma deleteinstance
    ("__EventFilter.Name='ScreenSaverStartFilter'", FAIL)

#pragma deleteinstance
    ("__EventFilter.Name='ScreenSaverStopFilter'", FAIL)


Vadikan 26-05-2010 12:25 1421425

Цитата:

Цитата amel27
смысл в том, что батники запускаются под системной учеткой без доступа к рабочему столу, т.е. если нужен доступ к окнам или учетка пользователя, то этот способ не подойдет »

Как я понял, в данном случае отслеживание события - это лишь прелюдия к запуску пользовательских задач, т.е. программы какой-то или скрипта.

Morpheus 26-05-2010 14:59 1421515

amel27, спасибо!
Цитата:

Цитата amel27
текст батников: »

Лог создаётся, а запустить что-то из батника - не запускается... Даже элементарную команду:
Код:

cmd /c notepad
Обойти возможно?

amel27 26-05-2010 15:33 1421539

Morpheus, notepad запускается под системной учеткой и поэтому не имеет возможности вывести своё окно на рабочий стол пользователя... перехват событий через WMI предназначен скорей для административных задач, т.е. приложений, не требующих взаимодействия с пользователем (скрипты, консольные приложения и т.п.)

Morpheus 26-05-2010 16:47 1421602

amel27, ок, понятно, спасибо! А можно ли сделать вместо запуска батника (или из этого батника), чтобы просто писалось какое-нибудь событие в журнал?

zonderz, можете исходники последнего варианта выложить?

zonderz 26-05-2010 17:38 1421653

Вложений: 1
O.K.

Morpheus 26-05-2010 18:09 1421681

zonderz, спасибо, пробую разобраться.

Iska 26-05-2010 18:48 1421714

Цитата:

Цитата Morpheus
amel27, ок, понятно, спасибо! А можно ли сделать вместо запуска батника (или из этого батника), чтобы просто писалось какое-нибудь событие в журнал? »

Logging to NT Event Log Based on an Event (Windows)

Morpheus 27-05-2010 03:58 1421974

Iska, спасибо! Эхх, как же тяжело, когда не совсем представляешь, что делаешь :)
Подскажите, плз, где косяк? (Только не говорите, что это один большой косяк :))
Код:

#pragma namespace ("\\\\.\\Root\\subscription")

instance of NTEventLogEventConsumer as $SCRSTARTCONSUMER
{
    Name = "SCRStartConsumer";
    SourceName = "SCRStartConsumer1";
    EventID = 7895;
    EventType = 3;
    Category = 0;
    NumberOfInsertionStrings = 1;
    InsertionStringTemplates = {"StartSCR"};
};   

instance of NTEventLogEventConsumer as $SCRSTOPCONSUMER
{
    Name = "SCRStopConsumer";
    SourceName = "SCRStopConsumer1";
    EventID = 7896;
    EventType = 3;
    Category = 0;
    NumberOfInsertionStrings = 1;
    InsertionStringTemplates = {"StopSCR"};
};   

// Создание экземпляра фильтра событий
// для создания нового процесса *.SCR
// и присвоение ему псевдонима $SCRSTARTFILTER

instance of __EventFilter as $SCRSTARTFILTER
{
    Name = "ScreenSaverStartFilter";
    EventNamespace = "\\\\.\\root\\cimv2"; 

    Query = "SELECT * FROM __InstanceCreationEvent WITHIN 5 "
            "WHERE TargetInstance ISA \"Win32_Process\" "
            "AND TargetInstance.Name LIKE \"%%.scr\"";
    QueryLanguage = "WQL";
};

// Создание экземпляра фильтра событий
// для удаления процесса *.SCR
// и присвоение ему псевдонима $SCRSTOPFILTER

instance of __EventFilter as $SCRSTOPFILTER
{
    Name = "ScreenSaverStopFilter";
    EventNamespace = "\\\\.\\root\\cimv2"; 

    Query = "SELECT * FROM __InstanceDeletionEvent WITHIN 5 "
            "WHERE TargetInstance ISA \"Win32_Process\" "
            "AND TargetInstance.Name LIKE \"%%.scr\"";
    QueryLanguage = "WQL";
};

// Создание экземпляра связи между фильтром и подписчиком
// события запуска хранителя экрана

instance of __FilterToConsumerBinding
{
    Consumer = $SCRSTARTCONSUMER;
    Filter = $SCRSTARTFILTER;
};

// Создание экземпляра связи между фильтром и подписчиком
// события остановки хранителя экрана

instance of __FilterToConsumerBinding
{
    Consumer = $SCRSTOPCONSUMER;
    Filter = $SCRSTOPFILTER;
};


amel27 27-05-2010 11:04 1422079

Цитата:

Цитата Morpheus
можно ли сделать вместо запуска батника (или из этого батника), чтобы просто писалось какое-нибудь событие в журнал »

если из батника, то можно VBS-скриптом: Logging an Event... впрочем, для WSH есть свой WMI потребитель

Цитата:

Цитата Morpheus
Подскажите, плз, где косяк? »

у меня и в таком виде работает, только нужно подправить SELECT, как подсказал Iska, или так:
Код:

    Query = "SELECT * FROM __InstanceCreationEvent WITHIN 5 "
            "WHERE TargetInstance ISA \"Win32_Process\" "
            "AND TargetInstance.CommandLine LIKE \"%%.scr /s\"";

Код:

    Query = "SELECT * FROM __InstanceDeletionEvent WITHIN 5 "
            "WHERE TargetInstance ISA \"Win32_Process\" "
            "AND TargetInstance.CommandLine LIKE \"%%.scr /s\"";


Morpheus 27-05-2010 13:52 1422174

amel27, т.е. так должно быть?
Код:

#pragma namespace ("\\\\.\\Root\\subscription")

// Создание экземпляра потребителя событий командной строки
// для запуска батника "c:\\TEST\scrstart.cmd", и
// присвоение ему псевдонима $SCRSTARTCONSUMER

instance of CommandLineEventConsumer as $SCRSTARTCONSUMER
{
        Name = "ScreenSaverStartConsumer";
        CommandLineTemplate = "D:\\MOF\\scrstart.cmd %TargetInstance.Name%";
        WorkingDirectory = "D:\\MOF";
};   

// Создание экземпляра потребителя событий командной строки
// для запуска батника "c:\\TEST\scrstop.cmd",
// присвоение ему псевдонима $SCRSTOPCONSUMER

instance of CommandLineEventConsumer as $SCRSTOPCONSUMER
{
        Name = "ScreenSaverStopConsumer";
        CommandLineTemplate = "D:\\MOF\\scrstop.cmd %TargetInstance.Name%";
        WorkingDirectory = "D:\\MOF";
};   

// Создание экземпляра фильтра событий
// для создания нового процесса *.SCR
// и присвоение ему псевдонима $SCRSTARTFILTER

instance of __EventFilter as $SCRSTARTFILTER
{
    Name = "ScreenSaverStartFilter";
    EventNamespace = "\\\\.\\root\\cimv2"; 

    Query = "SELECT * FROM __InstanceCreationEvent WITHIN 5 "
            "WHERE TargetInstance ISA \"Win32_Process\" "
            "AND TargetInstance.CommandLine LIKE \"%%.scr /s\"";
    QueryLanguage = "WQL";
};

// Создание экземпляра фильтра событий
// для удаления процесса *.SCR
// и присвоение ему псевдонима $SCRSTOPFILTER

instance of __EventFilter as $SCRSTOPFILTER
{
    Name = "ScreenSaverStopFilter";
    EventNamespace = "\\\\.\\root\\cimv2"; 

    Query = "SELECT * FROM __InstanceDeletionEvent WITHIN 5 "
            "WHERE TargetInstance ISA \"Win32_Process\" "
            "AND TargetInstance.CommandLine LIKE \"%%.scr /s\"";
    QueryLanguage = "WQL";
};

// Создание экземпляра связи между фильтром и подписчиком
// события запуска хранителя экрана

instance of __FilterToConsumerBinding
{
    Consumer = $SCRSTARTCONSUMER;
    Filter = $SCRSTARTFILTER;
};

// Создание экземпляра связи между фильтром и подписчиком
// события остановки хранителя экрана

instance of __FilterToConsumerBinding
{
    Consumer = $SCRSTOPCONSUMER;
    Filter = $SCRSTOPFILTER;
};


amel27 27-05-2010 15:45 1422249

Цитата:

Цитата Morpheus
так должно быть? »

не то чтобы должно, но желательно :)

Morpheus 27-05-2010 17:20 1422309

amel27, логи создаются, а событие в журнале найти не могу.

UPD: нашел, из-за чего не работал код из #30 - EventType = 3 не пишется, если = 1 или 4 - пишется.
Теперь другой проблем - событие Start создаётся 2 раза и одновременно пишется Stop. Не подскажете?

Iska 28-05-2010 13:58 1422938

Наверное, потому что нет такого значения EventType:
читать дальше »

Цитата:

Цитата MSDN

EventType
Data type: uint32
Access type: Read/write
Qualifiers: Not_Null

Type of event. This parameter can have one of the values in the following table, which are defined in Winnt.h and Ntelfapi.h.

Value Meaning:
EVENTLOG_SUCCESS Successful event
EVENTLOG_ERROR_TYPE Error event
EVENTLOG_WARNING_TYPE Warning event
EVENTLOG_INFORMATION_TYPE Information event
EVENTLOG_AUDIT_SUCCESS Success audit type
EVENTLOG_AUDIT_FAILURE Failure audit type

Цитата:

Цитата WinNT.h
Код:


//
// The types of events that can be logged.
//
#define EVENTLOG_SUCCESS                0x0000
#define EVENTLOG_ERROR_TYPE            0x0001
#define EVENTLOG_WARNING_TYPE          0x0002
#define EVENTLOG_INFORMATION_TYPE      0x0004
#define EVENTLOG_AUDIT_SUCCESS          0x0008
#define EVENTLOG_AUDIT_FAILURE          0x0010



Morpheus 28-05-2010 14:02 1422941

Цитата:

Цитата Iska
The types of events that can be logged. »

Вот этой информации мне и не хватало, для полной картины. Спасибо!

Остаётся разобраться с дублированием событий.

amel27 28-05-2010 17:28 1423085

Цитата:

Цитата Morpheus
Остаётся разобраться с дублированием событий. »

возможно, для одного фильтра зарегистрированы ДВА потребителя с разными именами, необходимо вспомнить и удалить все объекты по примеру из поста #22 (чтобы сообщения не появлялись вовсе), после чего провести компиляцию MOF-файла

P.S. если при компиляции встречается ошибка (несуществующий объект), то работа MofComp аварийно прекращается (т.е. для корректного удаления должны существовать ВСЕ описанные в MOF-файле объекты) - по этой причине после удаления могут оставаться "хвосты"

P.P.S есть удобные утилиты для визуальной работы с событиями (WMI Administrative Tools), но официально заявлена только поддержка XP :(

Morpheus 29-05-2010 00:11 1423284

amel27, хм, любопытно. Проверил на хосте вместо виртуалки, 1 старт и 1 стоп. М.б. есть способ вывести всех потребителей, для всех фильтров, в командной строке? В WMI Administrative Tools пустота, ставил в режиме совместимости, от админа, в профиль.

Удалил-создал-удалил-создал-удалил-создал с новыми именами - всё пришло в норму.

Теперь такой вопрос: Registering for Power Events (Windows)
Цитата:

GUID_MONITOR_POWER_ON - 02731015-4510-4526-99e6-e5a17ebd1aea
The monitor on/off notification indicates when the primary system monitor is on or off. This notification is useful for components that actively render content to the display device, such as media visualization. These applications should register for this notification and stop rendering graphics content when the monitor is off to reduce system power consumption. The Data member is a DWORD that indicates the current monitor state.

0x0
The monitor is off.

0x1
The monitor is on.
Можно ли прикрутить с помощью MOF или это уже из области С++?
Хочется отвязаться от заставки, которую я не использую, и привязаться к отключению/включению моника.

amel27 29-05-2010 05:56 1423372

Цитата:

Цитата Morpheus
Можно ли прикрутить с помощью MOF или это уже из области С++? »

поддержка состояния монитора через WMI заявлена, но не поддерживается, готовых (бесплатных) COM-объектов для использования в WSH не попадалось, а лобовое решение требует языков с поддержкой Win32 API: С++, Basic, (возможно) AutoIT и т.п.

Цитата:

Цитата Morpheus
В WMI Administrative Tools пустота, ставил в режиме совместимости, от админа, в профиль. »

у меня под W7 запустилось почти сразу и в обычном режиме... правда, только в режиме чтения, для полного доступа нужно запустить IE с правами админа и вручную вбить в строку адреса типа: "C:\Program Files\WMI Tools\EventReg.htm", указать контекст: "root\subscription" и в ниспадающем списке выбрать тип объектов (Consumers/Filters), на правой панели будут отражены текущие привязки объектов

Morpheus 29-05-2010 19:43 1423656

Цитата:

Цитата amel27
поддержка состояния монитора через WMI заявлена, но не поддерживается »

Жаль, спасибо!
Цитата:

Цитата amel27
у меня под W7 запустилось почти сразу и в обычном режиме... правда, только в режиме чтения, для полного доступа нужно запустить IE с правами админа и вручную вбить в строку адреса типа: "C:\Program Files\WMI Tools\EventReg.htm", указать контекст: "root\subscription" и в ниспадающем списке выбрать тип объектов (Consumers/Filters), на правой панели будут отражены текущие привязки объектов »

Спасибо, работает!

NicNic 24-01-2015 12:35 2460586

Доброго времени суток, форумчане!
Подскажите что не так делаю.
В корне диска С создал папку TEST наполнил ее своими scrstart.cmd и scrstop.cmd
Код с сообщения №2 вставляю в блокнот сохраняю как SCR.MOF и бросаю в папку пользователя иначе компилятор не видит файл.
Запускаю командную строку ввожу команду MOFComp SCR.MOF
Microsoft Windows [Version 6.3.9600]
(c) Корпорация Майкрософт (Microsoft Corporation), 2013. Все права защищены.

C:\Users\-->MOFComp SCR.MOF
Компилятор MOF (Майкрософт) версии 6.3.9600.16384
(c) Корпорация Майкрософт, 1997-2006. Все права защищены.
Идет анализ MOF-файла: SCR.MOF
MOF-файл успешно проанализирован
Хранение данных в репозитории...
Произошла ошибка при обработке элемента 1, определенного в строках: 7 - 12, в фа
йле SCR.MOF:
Ошибка: 0x80041003; оборудование: WMI
Описание: Отказано в доступе
Компилятор вернул ошибку 0x80041003
C:\Users\-->
Где косяк не пойму. Вин 8.1*64

NicNic 24-01-2015 13:49 2460612

О как! Оказывается командную строку надо запускать от админки, век живи век учись. (ПКМ по панели пуск)
Теперь выдало вот такое сообщение:

C:\Windows\system32>MOFComp C:\TEST\SCR.MOF
Компилятор MOF (Майкрософт) версии 6.3.9600.16384
(c) Корпорация Майкрософт, 1997-2006. Все права защищены.
Идет анализ MOF-файла: C:\TEST\SCR.MOF
MOF-файл успешно проанализирован
Хранение данных в репозитории...
ВНИМАНИЕ! Файл C:\TEST\SCR.MOF не содержит #PRAGMA AUTORECOVER.
Если репозиторий WMI в дальнейшем будет перестроен, в новый репозиторий WMI не б
удет включено содержимое этого MOF-файла.
Чтобы включить этот файл при автоматической перестройке репозитория WMI, в перво
й строке MOF-файла необходимо разместить инструкцию #PRAGMA AUTORECOVER.
Готово!
C:\Windows\system32>

И что надо добавлять #PRAGMA AUTORECOVER?

NicNic 25-01-2015 14:58 2461028

Е мое, а ведь это можно решить простым планировщиком заданий в виндовс (8.1) на других не проверял. Все работает просто прекрасно!
1.Создать задачу.
2. В "тригерах" при простое системы.
3. В "действиях" указать запуск программы (путь к проге), а в атрибуты вписать путь к видео.
4. В "условиях" выбрал: Запуск при простое, останавливать при выходе из простоя, перезапускать при возобновлении простоя.
Вот и ВСЕ!!!!!!!


Время: 11:24.

Время: 11:24.
© OSzone.net 2001-