如何检查我的电脑是否退出了睡眠模式

时间:2018-11-30 07:45:53

标签: c# .net-core

我能找到的所有资源都解释了如何检查PC是否处于睡眠模式,并且使用.NET Framework,但是我必须使用.NET Core,因为我的应用程序必须是跨平台的。

我想复制如下所示的内容,该内容需要.NET Framework,并且可以检查PC是否处于睡眠模式

SystemEvents.PowerModeChanged += OnPowerChange;

private void OnPowerChange(object s, PowerModeChangedEventArgs e) 
{
    switch ( e.Mode ) 
    {
        case PowerModes.Resume: 
        break;
        case PowerModes.Suspend:
        break;
    }
}

是否存在仅使用.NET Core的解决方案,或者是否存在可以导入和使用的用C / C ++编写的DLL?

2 个答案:

答案 0 :(得分:1)

依赖于睡眠模式的代码的主要问题是每个平台对它的定义都不同,因此没有内置解决方案(至少不是一个人知道的解决方案)

我最好的猜测是编写一个简单的库,该库将从当前系统获取电源状态,并将其映射到您自己的enum

该库将需要检查它正在运行的系统,您可以使用

System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform()

这将为您提供其中之一:

OSPlatform.Windows
OSPlatform.OSX
OSPlatform.Linux

然后,您将针对每种情况使用特定于平台的代码。所以:

对于Windows-Microsoft.Win32.SystemEventsSystemEvents.PowerModeChanged

Linux的较低级代码,可惜我不知道具体的解决方案,所以我所能做的就是为您提供一个链接,以解释Linux内核中的睡眠状态: https://www.kernel.org/doc/html/v4.18/admin-guide/pm/sleep-states.html

至于OSX,我也不知道。我的第一个猜测是,它的工作方式应与Linux情况类似,但是也许有一些库可以为您完成工作。

无论如何,对于Linux和OSX,您将需要使用外部C / C ++库,这些库将为您提供睡眠状态,并将其映射到您的枚举。

答案 1 :(得分:0)

“ PowerModeChangedEvent”可能对您有用,您可以在.net核心控制台应用程序中为此安装一个Nuget软件包。

package management screen

您需要确保引用using Microsoft.Win32;命名空间,并且需要进行一些研究(http://www.blackwasp.co.uk/DetectPowerEvents.aspx-可能很有用),以了解如何将该命名空间应用于您的特定方案。 / p>