簡體   English   中英

如何檢查我的電腦是否退出了睡眠模式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM