/// <summary> /// 获取系统电量百分比 /// </summary> /// <returns></returns> public static float GetSystemPower() { SYSTEM_POWER_STATUS SysPower = new SYSTEM_POWER_STATUS(); GetSystemPowerStatus(ref SysPower); return(SysPower.BatteryLifePercent); }
static void Main(string[] args) { Console.Title = "Easy to find title!"; IntPtr hWnd = FindWindow(null, "Easy to find title!"); // Hide the console if (hWnd != IntPtr.Zero) { ShowWindow(hWnd, 0); } // The system power charger struct SYSTEM_POWER_STATUS status = new SYSTEM_POWER_STATUS(); int current = 0; int last = 0; while (true) { System.Threading.Thread.Sleep(100); // Get Power status from Kernell GetSystemPowerStatus(ref status); // Set current to the current status current = status.ACLineStatus; // If the state has changed since last check if (current != last) { // 0 = AC disconnected // 1 = AC connected switch (current) { case 0: (new SoundPlayer("sound\\doh.wav")).Play(); break; case 1: (new SoundPlayer("sound\\woohoo.wav")).Play(); break; default: // Probably not an laptop or there's an error. Just quit System.Windows.Forms.MessageBox.Show("Error! Can't get the status"); return; break; } } last = current; // set last to current } }
static void Main(string[] args) { Console.Title = "Easy to find title!"; IntPtr hWnd = FindWindow(null, "Easy to find title!"); // Hide the console if (hWnd != IntPtr.Zero) ShowWindow(hWnd, 0); // The system power charger struct SYSTEM_POWER_STATUS status = new SYSTEM_POWER_STATUS(); int current = 0; int last = 0; while (true) { System.Threading.Thread.Sleep(100); // Get Power status from Kernell GetSystemPowerStatus(ref status); // Set current to the current status current = status.ACLineStatus; // If the state has changed since last check if (current != last) { // 0 = AC disconnected // 1 = AC connected switch(current) { case 0: (new SoundPlayer("sound\\doh.wav")).Play(); break; case 1: (new SoundPlayer("sound\\woohoo.wav")).Play(); break; default: // Probably not an laptop or there's an error. Just quit System.Windows.Forms.MessageBox.Show("Error! Can't get the status"); return; break; } } last = current; // set last to current } }
private void BatteryForm_Load(object sender, EventArgs e) { System.Diagnostics.Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High; netData.Max = 1000000; powerStatus = new SYSTEM_POWER_STATUS(); DoAsync async = new DoAsync(GetBatteryDetails); async.BeginInvoke(null, null); //define a thread to add values into chart ThreadStart addDataThreadStart = new ThreadStart(AddDataThreadLoop); addDataRunner = new Thread(addDataThreadStart); addDataDel += new AddDataDelegate(AddData); //add series into chart startTrending_Click(null, new EventArgs()); t = new System.Windows.Forms.Timer { Enabled = true, Interval = 1000 }; t.Tick += t_Tick; powerSource.TextChanged += new EventHandler(this.t_Tick); metroComboBox1.Items.Add("Monitor"); metroComboBox1.Items.Add("Fan"); metroComboBox1.Items.Add("Heat pipe"); metroComboBox1.Items.Add("Refrigeration"); metroComboBox1.Items.Add("TemperatureProbe"); metroComboBox1.Items.Add("CDROM Drive"); metroComboBox1.Items.Add("Disk Drive"); metroComboBox1.Items.Add("Floppy Drive"); metroComboBox1.Items.Add("Tape Drive"); metroComboBox1.Items.Add("Mother Board"); metroComboBox1.Items.Add("USB Hub"); metroComboBox1.Items.Add("Network adapter"); metroComboBox1.Items.Add("Voltage Probe"); metroComboBox1.Items.Add("Printer"); metroComboBox1.Items.Add("Processor"); this.metroComboBox1.SelectedIndexChanged += new System.EventHandler(metroComboBox1_SelectedIndexChanged); }
/// <summary> /// 读取交流电源线的连接状态 /// </summary> /// <returns></returns> public static string ReadAlternatingCurrentConnectState() { string AlternatingCurrentConnectState = ""; //交流供电情况 //申明一个结构对象,通过引用将值传到这个对象 SYSTEM_POWER_STATUS SysPower = new SYSTEM_POWER_STATUS(); GetSystemPowerStatus(ref SysPower); if (SysPower.ACLineStatus == 1) {//处于在线状态 AlternatingCurrentConnectState = "Online"; } else if (SysPower.ACLineStatus == 0) {//处于离线状态 AlternatingCurrentConnectState = "Offline"; } else {//未知状态 AlternatingCurrentConnectState = "UnKnown"; } return(AlternatingCurrentConnectState); }
private static extern bool GetSystemPowerStatus( out SYSTEM_POWER_STATUS systemPowerStatus);
internal extern static bool GetSystemPowerStatus(SYSTEM_POWER_STATUS SystemPowerStatus);
[DllImport("kernel32.dll", EntryPoint = "GetSystemPowerStatus")] //win32 api private static extern void GetSystemPowerStatus(ref SYSTEM_POWER_STATUS lpSystemPowerStatus);
public static extern BOOL GetSystemPowerStatus(ref SYSTEM_POWER_STATUS lpSystemPowerStatus);
public static partial BOOL GetSystemPowerStatus(ref SYSTEM_POWER_STATUS lpSystemPowerStatus);
public static extern bool GetSystemPowerStatus(out SYSTEM_POWER_STATUS lpSystemPowerStatus);
public static SYSTEM_POWER_STATUS GetStatus() { SYSTEM_POWER_STATUS SPS = new SYSTEM_POWER_STATUS(); GetSystemPowerStatus(ref SPS); return SPS; }
internal static extern bool GetSystemPowerStatus(out SYSTEM_POWER_STATUS systemPowerStatus);
private void UpdateDynamicSystemData() { DynamicSystemData = new DynamicSystemInfo(); try { MEMORYSTATUSEX memoryStatus = new MEMORYSTATUSEX(); GlobalMemoryStatusEx(memoryStatus); DynamicSystemData.PhysicalMemory = $"total = {memoryStatus.ullTotalPhys / GB:N2} GB, available = {memoryStatus.ullAvailPhys / GB:N2} GB"; DynamicSystemData.PhysicalPlusPagefile = $"total = {memoryStatus.ullTotalPageFile / GB:N2} GB, available = {memoryStatus.ullAvailPageFile / GB:N2} GB"; DynamicSystemData.VirtualMemory = $"total = {memoryStatus.ullTotalVirtual / GB:N2} GB, available = {memoryStatus.ullAvailVirtual / GB:N2} GB"; ulong pageFileOnDisk = memoryStatus.ullTotalPageFile - memoryStatus.ullTotalPhys; DynamicSystemData.PagefileOnDisk = $"{pageFileOnDisk / GB:N2} GB"; DynamicSystemData.MemoryLoad = $"{memoryStatus.dwMemoryLoad}%"; } catch (Exception ex) { App.AnalyticsWriteLine("MainPage.UpdateDynamicSystemData", "MEMORYSTATUSEX", ex.Message); } bool isBatteryAvailable = true; try { SYSTEM_POWER_STATUS powerStatus = new SYSTEM_POWER_STATUS(); GetSystemPowerStatus(ref powerStatus); DynamicSystemData.ACLineStatus = powerStatus.ACLineStatus.ToString(); DynamicSystemData.BatteryChargeStatus = $"{powerStatus.BatteryChargeStatus:G}"; if (powerStatus.BatteryChargeStatus == BatteryFlag.NoSystemBattery || powerStatus.BatteryChargeStatus == BatteryFlag.Unknown) { isBatteryAvailable = false; DynamicSystemData.BatteryLife = "n/a"; } else { DynamicSystemData.BatteryLife = $"{powerStatus.BatteryLifePercent}%"; } DynamicSystemData.BatterySaver = powerStatus.BatterySaver.ToString(); } catch (Exception ex) { App.AnalyticsWriteLine("MainPage.UpdateDynamicSystemData", "SYSTEM_POWER_STATUS", ex.Message); } if (isBatteryAvailable) { try { Battery battery = Battery.AggregateBattery; BatteryReport batteryReport = battery.GetReport(); DynamicSystemData.ChargeRate = $"{batteryReport.ChargeRateInMilliwatts:N0} mW"; DynamicSystemData.Capacity = $"design = {batteryReport.DesignCapacityInMilliwattHours:N0} mWh, " + $"full = {batteryReport.FullChargeCapacityInMilliwattHours:N0} mWh, " + $"remaining = {batteryReport.RemainingCapacityInMilliwattHours:N0} mWh"; } catch (Exception ex) { App.AnalyticsWriteLine("MainPage.UpdateDynamicSystemData", "BatteryReport", ex.Message); } } else { DynamicSystemData.ChargeRate = "n/a"; DynamicSystemData.Capacity = "n/a"; } try { ulong freeBytesAvailable; ulong totalNumberOfBytes; ulong totalNumberOfFreeBytes; // You can only specify a folder path that this app can access, but you can // get full disk information from any folder path. IStorageFolder appFolder = ApplicationData.Current.LocalFolder; GetDiskFreeSpaceEx(appFolder.Path, out freeBytesAvailable, out totalNumberOfBytes, out totalNumberOfFreeBytes); DynamicSystemData.TotalDiskSize = $"{totalNumberOfBytes / GB:N2} GB"; DynamicSystemData.DiskFreeSpace = $"{freeBytesAvailable / GB:N2} GB"; } catch (Exception ex) { App.AnalyticsWriteLine("MainPage.UpdateDynamicSystemData", "GetDiskFreeSpaceEx", ex.Message); } try { IntPtr infoPtr = IntPtr.Zero; uint infoLen = (uint)Marshal.SizeOf <FIXED_INFO>(); int ret = -1; while (ret != ERROR_SUCCESS) { infoPtr = Marshal.AllocHGlobal(Convert.ToInt32(infoLen)); ret = GetNetworkParams(infoPtr, ref infoLen); if (ret == ERROR_BUFFER_OVERFLOW) { // Try again with a bigger buffer. Marshal.FreeHGlobal(infoPtr); continue; } } FIXED_INFO info = Marshal.PtrToStructure <FIXED_INFO>(infoPtr); DynamicSystemData.DomainName = info.DomainName; string nodeType = string.Empty; switch (info.NodeType) { case BROADCAST_NODETYPE: nodeType = "Broadcast"; break; case PEER_TO_PEER_NODETYPE: nodeType = "Peer to Peer"; break; case MIXED_NODETYPE: nodeType = "Mixed"; break; case HYBRID_NODETYPE: nodeType = "Hybrid"; break; default: nodeType = $"Unknown ({info.NodeType})"; break; } DynamicSystemData.NodeType = nodeType; } catch (Exception ex) { App.AnalyticsWriteLine("MainPage.UpdateDynamicSystemData", "GetNetworkParams", ex.Message); } try { ConnectionProfile profile = NetworkInformation.GetInternetConnectionProfile(); DynamicSystemData.ConnectedProfile = profile.ProfileName; NetworkAdapter internetAdapter = profile.NetworkAdapter; DynamicSystemData.IanaInterfaceType = $"{(IanaInterfaceType)internetAdapter.IanaInterfaceType}"; DynamicSystemData.InboundSpeed = $"{internetAdapter.InboundMaxBitsPerSecond / MBPS:N0} Mbps"; DynamicSystemData.OutboundSpeed = $"{internetAdapter.OutboundMaxBitsPerSecond / MBPS:N0} Mbps"; IReadOnlyList <HostName> hostNames = NetworkInformation.GetHostNames(); HostName connectedHost = hostNames.Where (h => h.IPInformation != null && h.IPInformation.NetworkAdapter != null && h.IPInformation.NetworkAdapter.NetworkAdapterId == internetAdapter.NetworkAdapterId) .FirstOrDefault(); if (connectedHost != null) { DynamicSystemData.HostAddress = connectedHost.CanonicalName; DynamicSystemData.AddressType = connectedHost.Type.ToString(); } } catch (Exception ex) { App.AnalyticsWriteLine("MainPage.UpdateDynamicSystemData", "GetInternetConnectionProfile", ex.Message); } dynamicDataGrid.DataContext = DynamicSystemData; }
public static extern bool GetSystemPowerStatus([In, Out] ref SYSTEM_POWER_STATUS systemPowerStatus);
/// <summary> /// Transforms a Window/Service Message to PowerEventInfo /// </summary> public static PowerEventInfo TransformMessage(ref Message m) { if (m.Msg == WM_POWERBROADCAST) { switch ((int)m.WParam) { case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMBATTERYLOW: return(new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }); case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMOEMEVENT: return(new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam), OEMEventCode = (int)m.LParam }); case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMPOWERSTATUSCHANGE: { var pei = new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }; SYSTEM_POWER_STATUS sps = new SYSTEM_POWER_STATUS(); if (GetSystemPowerStatus(out sps)) { pei.SYSTEM_POWER_STATUS = sps; } return(pei); } case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMQUERYSTANDBY: return(new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }); case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMQUERYSTANDBYFAILED: return(new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }); case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMQUERYSUSPEND: return(new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }); case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMQUERYSUSPENDFAILED: return(new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }); case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMRESUMEAUTOMATIC: return(new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }); case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMRESUMECRITICAL: return(new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }); case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMRESUMESTANDBY: return(new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }); case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMRESUMESUSPEND: return(new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }); case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMSTANDBY: return(new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }); case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMSUSPEND: return(new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }); case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_POWERSETTINGCHANGE: { var pei = new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }; POWERBROADCAST_SETTING ps = (POWERBROADCAST_SETTING)Marshal.PtrToStructure(m.LParam, typeof(POWERBROADCAST_SETTING)); IntPtr pData = (IntPtr)(m.LParam.ToInt32() + Marshal.SizeOf(ps)); // (*1) if (ps.PowerSetting == PowerSettings.GUID_POWERSCHEME_PERSONALITY && ps.DataLength == Marshal.SizeOf(typeof(Guid))) { Guid newPersonality = (Guid)Marshal.PtrToStructure(pData, typeof(Guid)); if (newPersonality == PowerSettings.GUID_MAX_POWER_SAVINGS) { pei.PowerSavingsMode = PowerSavings.Max; } else if (newPersonality == PowerSettings.GUID_MIN_POWER_SAVINGS) { pei.PowerSavingsMode = PowerSavings.Min; } else if (newPersonality == PowerSettings.GUID_TYPICAL_POWER_SAVINGS) { pei.PowerSavingsMode = PowerSavings.Typical; } else { DebugLogger.WriteLine("switched to unknown Power savings"); } } else if (ps.PowerSetting == PowerSettings.GUID_ACDC_POWER_SOURCE && ps.DataLength == Marshal.SizeOf(typeof(Int32))) { Int32 iData = (Int32)Marshal.PtrToStructure(pData, typeof(Int32)); DebugLogger.WriteLine("ACDC: " + (PoweredBy)iData); pei.PoweredBy = (PoweredBy)iData; //onBattery = iData != 0; } else if (ps.PowerSetting == PowerSettings.GUID_ACTIVE_POWERSCHEME && ps.DataLength == Marshal.SizeOf(typeof(Guid))) { Guid schemeId = (Guid)Marshal.PtrToStructure(pData, typeof(Guid)); pei.CurrentPowerSchemeId = schemeId; pei.CurrentPowerScheme = ReadPowerSchemeFriendlyName(schemeId); } else if ((ps.PowerSetting == PowerSettings.GUID_CONSOLE_DISPLAY_STATE || ps.PowerSetting == PowerSettings.GUID_MONITOR_POWER_ON) && ps.DataLength == Marshal.SizeOf(typeof(Int32))) { Int32 iData = (Int32)Marshal.PtrToStructure(pData, typeof(Int32)); DebugLogger.WriteLine("monitor's display state: " + (MonitorDisplayState)iData); pei.CurrentMonitorDisplayState = (MonitorDisplayState)iData; } else if (ps.PowerSetting == PowerSettings.GUID_IDLE_BACKGROUND_TASK) { pei.Idle = DateTime.UtcNow; } else if (ps.PowerSetting == PowerSettings.GUID_BATTERY_PERCENTAGE_REMAINING) { Int32 iData = (Int32)Marshal.PtrToStructure(pData, typeof(Int32)); DebugLogger.WriteLine("Battery Power Remaining: " + iData); pei.BatteryPowerRemaining = iData; } else if (ps.PowerSetting == PowerSettings.GUID_LIDSWITCH_STATE_CHANGE) { Int32 iData = (Int32)Marshal.PtrToStructure(pData, typeof(Int32)); DebugLogger.WriteLine("Lid Open: " + iData); pei.LidOpen = (iData == 1); } else { DebugLogger.WriteLine("Unknown power setting {0}", ps.PowerSetting); } return(pei); } } } DebugLogger.WriteLine("Unhandled Power notification " + m.ToString()); return(null); }
/// <summary> /// Transforms a Window/Service Message to PowerEventInfo /// </summary> public static PowerEventInfo TransformMessage(ref Message m) { if (m.Msg == WM_POWERBROADCAST) { switch ((int)m.WParam) { case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMBATTERYLOW: return new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }; case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMOEMEVENT: return new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam), OEMEventCode = (int)m.LParam }; case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMPOWERSTATUSCHANGE: { var pei = new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }; SYSTEM_POWER_STATUS sps = new SYSTEM_POWER_STATUS(); if (GetSystemPowerStatus(out sps)) { pei.SYSTEM_POWER_STATUS = sps; } return pei; } case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMQUERYSTANDBY: return new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }; case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMQUERYSTANDBYFAILED: return new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }; case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMQUERYSUSPEND: return new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }; case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMQUERYSUSPENDFAILED: return new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }; case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMRESUMEAUTOMATIC: return new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }; case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMRESUMECRITICAL: return new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }; case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMRESUMESTANDBY: return new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }; case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMRESUMESUSPEND: return new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }; case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMSTANDBY: return new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }; case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_APMSUSPEND: return new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }; case (int)ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control.PBT_POWERSETTINGCHANGE: { var pei = new PowerEventInfo { PowerEvent = (ServicesAPI.SERVICE_CONTROL_POWEREVENT_Control)(int)(m.WParam) }; POWERBROADCAST_SETTING ps = (POWERBROADCAST_SETTING)Marshal.PtrToStructure(m.LParam, typeof(POWERBROADCAST_SETTING)); IntPtr pData = (IntPtr)(m.LParam.ToInt32() + Marshal.SizeOf(ps)); // (*1) if (ps.PowerSetting == PowerSettings.GUID_POWERSCHEME_PERSONALITY && ps.DataLength == Marshal.SizeOf(typeof(Guid))) { Guid newPersonality = (Guid)Marshal.PtrToStructure(pData, typeof(Guid)); if (newPersonality == PowerSettings.GUID_MAX_POWER_SAVINGS) { pei.PowerSavingsMode = PowerSavings.Max; } else if (newPersonality == PowerSettings.GUID_MIN_POWER_SAVINGS) { pei.PowerSavingsMode = PowerSavings.Min; } else if (newPersonality == PowerSettings.GUID_TYPICAL_POWER_SAVINGS) { pei.PowerSavingsMode = PowerSavings.Typical; } else { DebugLogger.WriteLine("switched to unknown Power savings"); } } else if (ps.PowerSetting == PowerSettings.GUID_ACDC_POWER_SOURCE && ps.DataLength == Marshal.SizeOf(typeof(Int32))) { Int32 iData = (Int32)Marshal.PtrToStructure(pData, typeof(Int32)); DebugLogger.WriteLine("ACDC: " + (PoweredBy)iData); pei.PoweredBy = (PoweredBy)iData; //onBattery = iData != 0; } else if (ps.PowerSetting == PowerSettings.GUID_ACTIVE_POWERSCHEME && ps.DataLength == Marshal.SizeOf(typeof(Guid))) { Guid schemeId = (Guid)Marshal.PtrToStructure(pData, typeof(Guid)); pei.CurrentPowerSchemeId = schemeId; pei.CurrentPowerScheme = ReadPowerSchemeFriendlyName(schemeId); } else if ((ps.PowerSetting == PowerSettings.GUID_CONSOLE_DISPLAY_STATE || ps.PowerSetting == PowerSettings.GUID_MONITOR_POWER_ON) && ps.DataLength == Marshal.SizeOf(typeof(Int32))) { Int32 iData = (Int32)Marshal.PtrToStructure(pData, typeof(Int32)); DebugLogger.WriteLine("monitor's display state: " + (MonitorDisplayState)iData); pei.CurrentMonitorDisplayState = (MonitorDisplayState)iData; } else if (ps.PowerSetting == PowerSettings.GUID_IDLE_BACKGROUND_TASK) { pei.Idle = DateTime.UtcNow; } else if (ps.PowerSetting == PowerSettings.GUID_BATTERY_PERCENTAGE_REMAINING) { Int32 iData = (Int32)Marshal.PtrToStructure(pData, typeof(Int32)); DebugLogger.WriteLine("Battery Power Remaining: " + iData); pei.BatteryPowerRemaining = iData; } else if (ps.PowerSetting == PowerSettings.GUID_LIDSWITCH_STATE_CHANGE) { Int32 iData = (Int32)Marshal.PtrToStructure(pData, typeof(Int32)); DebugLogger.WriteLine("Lid Open: " + iData); pei.LidOpen = (iData == 1); } else { DebugLogger.WriteLine("Unknown power setting {0}", ps.PowerSetting); } return pei; } } } DebugLogger.WriteLine("Unhandled Power notification " + m.ToString()); return null; }
private static extern int GetSystemPowerStatus(ref SYSTEM_POWER_STATUS lpSystemPowerStatus);