C# 如何使用ManagementEventWatcher跟踪暂停/恢复?
我尝试在服务中使用ManagementEventWatcher来跟踪计算机何时进入和退出睡眠模式。我是.NET和C的新手,所以我很难想出语法来实现这一点 我发现了一个详细的例子,他是如何使用ManagementEventWatcher来跟踪此状态的,但他没有发布他的全部代码。我正在尝试创建一个简单的服务,创建一个.txt日志文件,说明计算机已暂停/恢复,但名称空间和类型出现问题 以下是service.cs文件的代码:C# 如何使用ManagementEventWatcher跟踪暂停/恢复?,c#,.net,service,managementeventwatcher,C#,.net,Service,Managementeventwatcher,我尝试在服务中使用ManagementEventWatcher来跟踪计算机何时进入和退出睡眠模式。我是.NET和C的新手,所以我很难想出语法来实现这一点 我发现了一个详细的例子,他是如何使用ManagementEventWatcher来跟踪此状态的,但他没有发布他的全部代码。我正在尝试创建一个简单的服务,创建一个.txt日志文件,说明计算机已暂停/恢复,但名称空间和类型出现问题 以下是service.cs文件的代码: using System; using System.Collections.
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”
发现你丢失了一个文件吗
指令还是程序集引用
谢谢
Tomek您需要System.Management命名空间,它包含在您提供的代码示例中。我相信您需要在项目设置中引用System.Management库。按照以下步骤执行此操作我假设您正在起诉Visual Studio:
转到解决方案资源管理器,展开项目,右键单击“引用”文件夹/选项,然后从关联菜单中选择“添加引用”。现在选择.Net选项卡并从列表中选择System.Management,然后单击OK 感谢您的建议,现在我得到一个错误,WqlEventQuery不包含接受“1”参数的构造函数。我一直在网上搜索一些解决方案,人们似乎一直在通过传递一个参数来使用WqlEventQuery。我将不得不做更多的研究。你可能会因为下面的代码行而得到这个错误:public class WqlEventQuery:EventQuery{}这一行基本上重新定义了WqlEventQuery类。由于您没有为此类定义任何构造函数,因此将使用默认构造函数。