internal static void Main_MessageReceived(object sender, EventArgsValue <Message> e) { if (e.Value.Msg != (int)Classes.System.WindowsMessages.WM_POWERBROADCAST) { return; } PBT wParam = (PBT)e.Value.WParam.ToInt32(); switch (wParam) { case PBT.POWERSETTINGCHANGE: PowerBroadcast_Setting pbs = (PowerBroadcast_Setting)Marshal.PtrToStructure(e.Value.LParam, typeof(PowerBroadcast_Setting)); PowerScheme oldPlan = (PowerScheme)oldStaticValues[EventType.PowerSchemeChanged]; PowerScheme newPlan = Status.Power.ActivePowerScheme; if (oldPlan == newPlan) { return; } if (OnPowerSchemeChanged != null) { OnPowerSchemeChanged(null, new EventArgsValues <PowerScheme>(oldPlan, newPlan)); } oldStaticValues[EventType.PowerSchemeChanged] = newPlan; break; } }
internal static void Main_MessageReceived(object sender, EventArgsValue <Message> e) { if (e.Value.Msg != (int)WindowsMessages.WM_DEVICECHANGE || e.Value.LParam == IntPtr.Zero) { return; } DEV_BROADCAST_VOLUME dbcv = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(e.Value.LParam, typeof(DEV_BROADCAST_VOLUME)); if (dbcv.dbcv_devicetype != (int)DBT.DEVTYP_VOLUME) { return; // we were not even allowed to transform to DEV_BROADCAST_VOLUME =) But who cares... } switch ((DBT)((int)e.Value.WParam)) { #region case DBT.DEVICEARRIVLE: case DBT.DEVICEARRIVAL: StorageDisk device = StorageDisk.FromUnitMask(dbcv.dbcv_unitmask); ((List <StorageDisk>)oldStaticValues[EventType.DeviceRemoved]).Add(device); if (dbcv.dbcv_flags == 1 /*DBFT_MEDIA*/) { if (OnMediaInserted != null) { OnMediaInserted(null, new EventArgsValue <Classes.Device.Device>(device)); } } else if (dbcv.dbcv_flags == 2 /*DBFT_NET*/) { if (OnNetworkVolumeArrived != null) { OnNetworkVolumeArrived(null, new EventArgsValue <Classes.Device.Device>(device)); } } else { if (OnDeviceArrived != null) { OnDeviceArrived(null, new EventArgsValue <Classes.Device.Device>(device)); } } break; #endregion #region case DBT.DEVICEQUERYREMOVE: case DBT.DEVICEQUERYREMOVE: throw new NotImplementedException("\"Device Query remove\" is not implemented"); #endregion #region case DBT.DEVICEQUERYREMOVEFAILED: case DBT.DEVICEQUERYREMOVEFAILED: throw new NotImplementedException("\"Device Query remove failed\" is not implemented"); #endregion #region case DBT.DEVICEREMOVECOMPLETE: case DBT.DEVICEREMOVECOMPLETE: if (OnDeviceRemoved == null) { break; } char removedDiskLetter = StorageDisk.FirstDriveFromMask(dbcv.dbcv_unitmask); List <StorageDisk> oldDisks = (List <StorageDisk>)oldStaticValues[EventType.DeviceRemoved]; foreach (StorageDisk oldDisk in oldDisks) { if (oldDisk.DriveLetters.Contains(removedDiskLetter)) { OnDeviceRemoved(null, new EventArgsValue <Classes.Device.Device>(oldDisk)); oldDisks.Remove(oldDisk); break; } } break; #endregion } }