スリープモードになった場合に備えて、PCをウェイクアップさせようとしています。いくつかの Web サイトでこのコード スニペットを見つけましたが、最後に追加したメッセージ ボックスは常にすぐに返されます。
また、システムの電源オプションでウェイク タイマーを使用できるようにしました。
[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 IntPtr handle;
private void SetWaitForWakeUpTime()
{
long duetime = 1200000000;
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 !");
}
そして、私はそれを次のように呼んでいます:
private void buttonTest_Click(object sender, EventArgs e)
{
SetWaitForWakeUpTime();
}
理論的には、これは 2 分後にしか通知されないはずですよね? すぐに通知されるのはなぜですか?どうすれば修正できますか?