9

サービスで ManagementEventWatcher を使用して、コンピューターがいつスリープ モードに移行したか、いつスリープ モードから復帰したかを追跡しようとしています。私は .NET と C# を初めて使用するので、これを機能させるための構文を考え出すのにかなり苦労しています。

彼がどのように 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 ディレクティブまたはアセンブリ参照がありませんか?)

ありがとう、

トメク

4

1 に答える 1

7

提供されたコード サンプルに含まれている System.Management 名前空間が必要です。プロジェクト設定で System.Management ライブラリを参照する必要があると思います。これを行うには、次の手順に従います (Visual Studio を訴えていると仮定しています)。

ソリューション エクスプローラーに移動してプロジェクトを展開し、[参照] フォルダー/オプションを右クリックして、コンテキスト メニューから [参照の追加] を選択します。.Net タブを選択し、リストから System.Management を選択して [OK] をクリックします。

于 2010-01-27T21:56:45.597 に答える