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