如何使用 C 在 Windows 服务中找出系统进入新式待机模式#

How to find out system is entering the Modern Standby mode in Windows service using C#

提问人:Vahidreza Arabpour 提问时间:11/15/2023 更新时间:11/15/2023 访问量:17

问:

我正在开发用 C# 编写的 Windows 服务。我需要确定系统是否进入睡眠模式,以及它是否从睡眠模式恢复以执行某些进程并设置一些变量。我使用系统管理来执行此操作,但它没有获得新式待机进入事件回调。

我的服务在不支持新式待机的设备上工作正常,但在支持此待机模式的设备上不会引发任何事件。 有没有办法获得这个事件?

以下是负责电源管理监视的部分代码:

         WqlEventQuery query = new WqlEventQuery("Win32_PowerManagementEvent");
         _powerManagementWatcher = new ManagementEventWatcher(query);
         _powerManagementWatcher.EventArrived += PowerEventArrived;
         _powerManagementWatcher.Start();

.
.
.
.
        private void PowerEventArrived(object sender, EventArrivedEventArgs e)
        {
            int eventType = Convert.ToInt32(e.NewEvent.Properties["EventType"].Value);
            Log.Info($"System power event called. Event type number: {eventType}");

            if (eventType == 7) // PBT_APMRESUMESUSPEND 
            {
                Log.Info("System is waking from sleep.");
            }
            else if (eventType == 8) // PBT_APMRESUMESTANDBY
            {
                Log.Info("System is resuming from standby.");
            }
            else if (eventType == 4) // PBT_APMSUSPEND
            {
                Log.Info("System is going to sleep.");

            }
            else if (eventType == 5) // PBT_APMSTANDBY 
            {
                Log.Info("System is going to Standby mode.");
            }
        }
C# Windows 服务

评论


答: 暂无答案