天天看点

待机状态下唤醒电脑的方法

今天从CSDN上看到一篇关于待机状态下使用程序唤醒电脑的代码,感觉很好,不过没有试过,现把代码转过来以供日后有用的时候再试一下。

using System;

using System.Runtime.InteropServices;

using Microsoft.Win32.SafeHandles;

using System.Threading;

using System.ComponentModel;

namespace ConsoleApplication1 {

class Program {

[DllImport("kernel32.dll")]

public static extern SafeWaitHandle CreateWaitableTimer(IntPtr lpTimerAttributes, bool bManualReset, string lpTimerName);

[DllImport("kernel32.dll", SetLastError = true)]

[return: MarshalAs(UnmanagedType.Bool)]

public static extern bool SetWaitableTimer(SafeWaitHandle hTimer, [In] ref long pDueTime, int lPeriod, IntPtr pfnCompletionRoutine, IntPtr lpArgToCompletionRoutine, bool fResume);

static void Main(string[] args) {

SetWaitForWakeUpTime();

}

static void SetWaitForWakeUpTime() {

DateTime utc = DateTime.Now.AddMinutes(1);

long duetime = utc.ToFileTime();

using (SafeWaitHandle handle = CreateWaitableTimer(IntPtr.Zero, true, "MyWaitabletimer")) {

if (SetWaitableTimer(handle, ref duetime, 0, IntPtr.Zero, IntPtr.Zero, true)) {

using (EventWaitHandle wh = new EventWaitHandle(false, EventResetMode.AutoReset)) {

wh.SafeWaitHandle = handle;

wh.WaitOne();

}

} else {

throw new Win32Exception(Marshal.GetLastWin32Error());

}

}

// You could make it a recursive call here, setting it to 1 hours time or similar

Console.WriteLine("Wake up call");

Console.ReadLine();

}

}

}

待机状态下唤醒电脑的方法