我試圖在服務中使用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」不能 (是否缺少using 指令或程序集引用?)
謝謝,
託梅克
感謝您的建議,現在我得到一個錯誤,WqlEventQuery「不包含帶'1'參數的構造函數」。我一直在尋找一些解決方案,似乎人們通過傳遞一個參數來使用WqlEventQuery。我將不得不做更多的研究。 – Tomek 2010-01-28 17:57:45
由於以下代碼行可能導致該錯誤: public class WqlEventQuery:EventQuery {} 該行基本上重新定義了WqlEventQuery類。由於您沒有爲此類定義任何構造函數,因此將使用默認構造函數。 – user258808 2010-01-28 19:52:57