今天從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();
}
}
}
