开发环境: VS2005 Winxp
有如下代码:
 public Form1()
{
InitializeComponent();
SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(SystemEvents_PowerModeChanged);
}private void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
{
if (e.Mode == PowerModes.Suspend)
{
................ 
}
if (e.Mode == PowerModes.Resume)
{}
}
在WindForm下好用,可以监测到 本地机器的standby resume 状态。
但是将这段 代码 移植到 Windows Service后 根本不会响应这个事件'SystemEvents_PowerModeChanged'。
请知道的给解惑一下。如何修改 Windows Service下的代码 可以监测到 pc standby 的状态呢。

解决方案 »

  1.   

    这个事件是无法通知到服务程序的,你可以换用
    System.Management.ManagementEventWatcher 
    Win32_PowerManagementEvent 事件
      

  2.   

    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }    protected override void OnStart(string[] args)
        {
            this.CanHandlePowerEvent = true;
        }
        protected override bool OnPowerEvent(PowerBroadcastStatus powerStatus)
        {
            switch (powerStatus)
            {
                case PowerBroadcastStatus.QuerySuspend: break;
                case PowerBroadcastStatus.PowerStatusChange: break;
            }
            return base.OnPowerEvent(powerStatus);
        }
        ...
    }