c# – 如何检查我的PC是否退出睡眠模式

我可以找到的所有资源,解释如何检查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我可以导入和使用?

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

我最好的猜测是如何编写一个简单的库,它将从当前系统获得电源状态,并将其映射到您自己的枚举.

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

System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform()

那会给你一个:

OSPlatform.Windows
OSPlatform.OSX
OSPlatform.Linux

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

对于Windows – 带有SystemEvents.PowerModeChanged的Microsoft.Win32.SystemEvents

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

至于OSX,我也不知道.我的第一个猜测是它应该与Linux案例类似,但也许有一些库为你做这件事.

在任何情况下,对于Linux和OSX,您将需要使用外部C/C++库来为您提供睡眠状态,并将其映射到您的枚举.

点赞