2011-06-30 78 views
7

如何在Windows 7和XP中以編程方式檢查「Windows電源管理」是否關閉了顯示器? (如果我能收到一個事件,那會更好。)檢查顯示器是否由Windows電源管理關閉

+1

你爲什麼想知道?所以你可以重新打開它?有一種方法可以對Windows說「當這個應用程序運行時,它不會獲得太多的鍵盤/鼠標動作,但這並不意味着我們閒置,因此不要讓屏幕空白」(例如對於視頻播放器)。如果這就是你,防止消隱勝於通知它,對吧? –

+0

類似:http://stackoverflow.com/questions/328490/monitoring-a-displays-state-in-python – 2011-07-06 13:08:33

+0

你可以看看IMSVidDevice:msdn.microsoft.com/en-us/library/dd694519(VS.85 ).aspx – 2011-07-06 13:13:22

回答

7

我不認爲它可以爲XP做。在Windows 7中,有各種與電源管理相關的好東西。 Windows API Code Pack是一組託管封裝器,它們很容易從C#或VB中調用,並將Windows範例(如事件接收器,Windows消息和函數指針)映射到.NET應用程序(如代理和事件)中。從電源管理演示附帶的代碼包,這裏是一些代碼,你可能會喜歡:

using Microsoft.WindowsAPICodePack.ApplicationServices; 

// . . . 
     PowerManager.IsMonitorOnChanged += new EventHandler(MonitorOnChanged); 
// . . . 
    void MonitorOnChanged(object sender, EventArgs e) 
    { 
     settings.MonitorOn = PowerManager.IsMonitorOn; 
     AddEventMessage(string.Format("Monitor status changed (new status: {0})", PowerManager.IsMonitorOn ? "On" : "Off")); 
    } 

編輯:

鏈接到Windows API代碼包:Windows API Code Pack: Where is it?

如果你想使用它,就像在被提及這篇文章檢查這個:https://stackoverflow.com/a/27709672/846232

+0

感謝隊友。我只是添加鏈接,下載該圖書館:) – sczdavos

+0

作品像一個魅力,結合屏幕保護程序檢查從http://stackoverflow.com/a/9858981/1025177(更改「(isRunning)」到「(isRunning || !PowerManager.IsMonitorOn)「)可以涵蓋這兩種屏幕保護:D – BloodyRain2k

1

您的應用程序將在wParam中使用SC_MONITORPOWER發送一條WM_SYSCOMMAND消息(確保首先使用0xfff0與wParam對應)。當屏幕保護程序啓動時(SC_SCREENSAVE),它會發送類似的消息。如果您的目標是阻止屏幕關閉,您可以在這些設置上返回0,但在用戶設置密碼時不起作用。

+0

如果您的應用程序的窗口不是活動窗口,它也不起作用。 – Dunk

相關問題