Получил нижеприведенный пост с сайта. Кто-нибудь пробовал это?
Ничего в рамках, поэтому вам придется немного "PInvoke".
API, которые вам нужно вызвать, это CreateWaitableTimer и SetWaitableTimer.
Ниже приводится полный (Q & D) пример, который иллюстрирует, как вы можете установить
система, которая должна быть выведена из режима сна / гибернации с использованием Win32 API выше.
Обратите внимание, что здесь я устанавливаю относительное время пробуждения 300000000 нСек.
Это означает, что компьютер проснется (если он спит или
в спящем режиме) в течение 30 секунд после установки таймера.
Обратитесь к документации MSDN для получения подробной информации о SetWaitableTimer и его аргументах.
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace Willys
{
class Program
{
[DllImport("kernel32.dll")]
public static extern IntPtr CreateWaitableTimer(IntPtr lpTimerAttributes,
bool bManualReset, string lpTimerName);
[DllImport("kernel32.dll")]
public static extern bool SetWaitableTimer(IntPtr hTimer, [In] ref long
pDueTime, int lPeriod, IntPtr pfnCompletionRoutine, IntPtr
lpArgToCompletionRoutine, bool fResume);
[DllImport("kernel32", SetLastError = true, ExactSpelling = true)]
public static extern Int32 WaitForSingleObject(IntPtr handle, uint
milliseconds);
static void Main()
{
SetWaitForWakeUpTime();
}
static IntPtr handle;
static void SetWaitForWakeUpTime()
{
long duetime = -300000000; // negative value, so a RELATIVE due time
Console.WriteLine("{0:x}", duetime);
handle = CreateWaitableTimer(IntPtr.Zero, true, "MyWaitabletimer");
SetWaitableTimer(handle, ref duetime, 0, IntPtr.Zero, IntPtr.Zero, true);
uint INFINITE = 0xFFFFFFFF;
int ret = WaitForSingleObject(handle, INFINITE);
MessageBox.Show("Wake up call");
}
}
}