Не думаю, что это можно сделать для 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: где это?
Если вы хотите использовать его, как указано в этом посте, отметьте это: https://stackoverflow.com/a/27709672/846232