[英]How do I check if my PC exited sleep mode
我可以找到的所有資料都解釋了如何使用.NET Framework檢查PC是否處於睡眠模式,但是我必須使用.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?
依賴睡眠模式的代碼的主要問題在於,每個平台對它的定義都不同,因此沒有內置解決方案(至少不是一個人知道的解決方案)
我最好的猜測是編寫一個簡單的庫,該庫將從當前系統獲取電源狀態,並將其映射到您自己的enum
。
該庫將需要檢查它正在運行的系統,可以使用
System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform()
這將為您提供以下之一:
OSPlatform.Windows
OSPlatform.OSX
OSPlatform.Linux
然后,您將針對每種情況使用特定於平台的代碼。 所以:
對於SystemEvents.PowerModeChanged
具有SystemEvents.PowerModeChanged
Microsoft.Win32.SystemEvents
遺憾的是,我不知道Linux的較低級代碼的具體解決方案,因此,我所能做的就是為您提供一個鏈接,以解釋Linux內核中的睡眠狀態: https : //www.kernel.org/doc/html/v4.18/管理員指南/pm/sleep-states.html
至於OSX,我也不知道。 我的第一個猜測是,它的工作方式應與Linux情況類似,但也許有一些庫可以為您完成此工作。
無論如何,對於Linux和OSX,您將需要使用外部C / C ++庫,這些庫將為您提供睡眠狀態,並將其映射到您的枚舉。
'PowerModeChangedEvent'可能對您有用,您可以在.net核心控制台應用程序中為此安裝一個Nuget軟件包。
您需要確保您引用using Microsoft.Win32;
命名空間,您需要進行一些研究( http://www.blackwasp.co.uk/DetectPowerEvents.aspx-可能會有用),以了解如何將其應用到您的特定方案中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.