Я пытаюсь использовать ManagementEventWatcher в службе, чтобы отслеживать, когда компьютер входит в режим ожидания и выходит из него. Я новичок в .NET и C#, поэтому я изо всех сил пытаюсь придумать синтаксис, чтобы сделать эту работу.Как использовать ManagementEventWatcher для отслеживания приостановки/возобновления?
Я нашел blog post, который подробно описывает, как он использовал ManagementEventWatcher, чтобы отслеживать этот статус, но он не опубликовал весь свой код. Я пытаюсь пройти и сделать простой сервис, который создает файл журнала .txt, в котором указано, что компьютер был приостановлен/возобновлен, но я столкнулся с проблемами с пространствами имен и типами.
Вот код в файл service.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Management;
namespace SleepNotifierService
{
public class WqlEventQuery : EventQuery { }
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
WqlEventQuery query = new WqlEventQuery("Win32_PowerManagementEvent");
_watcher = new ManagementEventWatcher(query);
_watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
_watcher.Start();
}
protected override void OnStop()
{
_watcher.Stop();
}
void watcher_EventArrived(object sender, EventArrivedEventArgs e)
{
try
{
int eventType = Convert.ToInt32(e.NewEvent.Properties["EventType"].Value);
switch (eventType)
{
case 4:
Sleep();
break;
case 7:
Resume();
break;
}
}
catch (Exception ex)
{
//Log(ex.Message);
}
}
public void Sleep()
{
}
public void Resume()
{
}
}
}
Опять же, это первый раз, когда я программирования с .NET и C#, так что я прошу прощения за мое невежество.
Я получаю ошибки пространства имен, таких как:
типа или пространства имен имя «ManagementEventWatcher» не может быть найдено (вы пропали без вести с помощью директивы или ссылка на сборку?)
Спасибо,
Томек
спасибо за совет, теперь я получаю сообщение об ошибке, что WqlEventQuery "не содержит конструктор, который принимает аргументы" 1 ". Я искал в Интернете какое-то решение, и кажется, что люди используют WqlEventQuery, передавая один аргумент. Я собираюсь сделать еще несколько исследований. – Tomek
Вероятно, вы получаете эту ошибку из-за следующей строки кода: public class WqlEventQuery: EventQuery {} Эта строка в основном переопределяет класс WqlEventQuery. И поскольку у вас нет конструкторов, определенных для этого класса, будет использоваться конструктор по умолчанию. – user258808