예제 #1
0
        /// <summary>
        /// Gets a last time of the system change a power state.
        /// </summary>
        /// <param name="level">Indicates power level information.</param>
        /// <returns>Last time of the changing the system power state.</returns>
        private static DateTime LastPowerChangedStateTime(PowerInformationLevel level)
        {
            var lastWakeDuration = GetPowerInformation <long>(level);

            var lastSleepTime = DateTime.Now - TimeSpan.FromMilliseconds(PowerManagementNative.GetTickCount64()) +
                                TimeSpan.FromTicks(lastWakeDuration);

            return(lastSleepTime);
        }
예제 #2
0
        /// <summary>
        /// Wraps CallNtPowerInformationForRead method.
        /// </summary>
        /// <typeparam name="T">An output buffer type.</typeparam>
        /// <param name="level">Indicates power level information.</param>
        /// <param name="readOutputBuffer">The output buffer result.</param>
        public static void CallNtPowerInformationForRead <T>(PowerInformationLevel level, Action <IntPtr> readOutputBuffer)
        {
            var outputBufferSize = Marshal.SizeOf <T>();
            var outputBuffer     = Marshal.AllocHGlobal(outputBufferSize);

            PowerManagementNative.CallNtPowerInformation((int)level, IntPtr.Zero, 0, outputBuffer,
                                                         (uint)outputBufferSize);
            readOutputBuffer.Invoke(outputBuffer);

            Marshal.FreeHGlobal(outputBuffer);
        }
예제 #3
0
        /// <summary>
        /// Wraps CallNtPowerInformationForRead method.
        /// </summary>
        /// <typeparam name="T">An input buffer type.</typeparam>
        /// <param name="level">Indicates power level information.</param>
        /// <param name="writeInputBuffer">The function that is responsible for marhaling input parametrs.</param>
        public static void CallNtPowerInformationForWrite <T>(PowerInformationLevel level, Action <IntPtr> writeInputBuffer)
        {
            var inputBufferSize = Marshal.SizeOf <T>();
            var inputBuffer     = Marshal.AllocHGlobal(inputBufferSize);

            writeInputBuffer.Invoke(inputBuffer);

            PowerManagementNative.CallNtPowerInformation((int)level, inputBuffer,
                                                         (uint)inputBufferSize, IntPtr.Zero, 0);

            Marshal.FreeHGlobal(inputBuffer);
        }
예제 #4
0
 /// <summary>
 /// Suspends the system by shutting power down in hibernation.
 /// </summary>
 public static void HybernateSystem()
 {
     PowerManagementNative.SetSuspendState(true, false, false);
 }
예제 #5
0
 /// <summary>
 /// Suspends the system by shutting power down in a sleep state.
 /// </summary>
 public static void SleepSystem()
 {
     PowerManagementNative.SetSuspendState(false, false, false);
 }