Вы можете разбудить компьютер из сна, я не уверен насчет гибернации. Этот пример показывает, как это сделать. Короче говоря, вы используете эти два импорта:
[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);
Я тестировал его только в Windows Vista и 7, они могут быть недоступны в XP.