系统挂起再恢复时如何获取事件

Posted

技术标签:

【中文标题】系统挂起再恢复时如何获取事件【英文标题】:How to get events when the system is suspended and then resuming 【发布时间】:2018-08-30 11:28:25 【问题描述】:

我想知道当前系统状态是挂起还是恢复。我已经试过SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;

private void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)

  log.DebugFormat("System Power event 0", e.Mode.ToString());

我想频繁地获取系统的状态。我也不想使用 WMI 查询。有没有其他方法可以检测系统状态。

【问题讨论】:

程序不会在挂起状态下运行,我不确定什么是“恢复”。 @RonBeyer 那你可以问问他是什么意思。如您所见,这是一个完全有效的问题。该事件在暂停计算机之前触发,一旦计算机再次被唤醒,就会触发恢复事件。 如果您想跟踪计算机暂停/活动的时间,只需保存上次触发事件的日期/时间,并与它比较新的事件日期。 【参考方案1】:

然后,您可以使用 SystemEvents.PowerModeChanged 事件来了解系统是否正在挂起(当您休眠或睡眠时会发生挂起)。

    SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(OnPowerModeChanged);


    private static void OnPowerModeChanged(object sender, PowerModeChangedEventArgs e)
    
        switch (e.Mode)
        
            case PowerModes.Resume:
                MessageBox.Show("PowerMode: OS is resuming from suspended state");
                break;

            case PowerModes.Suspend:
                MessageBox.Show("PowerMode: OS is about to be suspended");
                break;
        
    

希望这会有所帮助。

【讨论】:

以上是关于系统挂起再恢复时如何获取事件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Linux 上检测挂起的系统关闭?

linux 输出前五分钟时间

如何在运行 Azure 流分析查询时获取系统时间

如何获取触发事件时执行的 JavaScript 文件列表?

Activity恢复时如何获取Fragment

进程的阻塞和挂起的区别