我能找到的所有资源都解释了如何检查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?
答案 0 :(得分:1)
依赖于睡眠模式的代码的主要问题是每个平台对它的定义都不同,因此没有内置解决方案(至少不是一个人知道的解决方案)
我最好的猜测是编写一个简单的库,该库将从当前系统获取电源状态,并将其映射到您自己的enum
。
该库将需要检查它正在运行的系统,您可以使用
System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform()
这将为您提供其中之一:
OSPlatform.Windows
OSPlatform.OSX
OSPlatform.Linux
然后,您将针对每种情况使用特定于平台的代码。所以:
对于Windows-Microsoft.Win32.SystemEvents
与SystemEvents.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软件包。
您需要确保引用using Microsoft.Win32;
命名空间,并且需要进行一些研究(http://www.blackwasp.co.uk/DetectPowerEvents.aspx-可能很有用),以了解如何将该命名空间应用于您的特定方案。 / p>