山本ワールド
スリープから指定時間に復帰するプログラム(32/64bit)
WaitableTimerをセット後、スリープし、指定時間後に復帰するプログラムです。
        Visual C++ 2008 Standard Edition 32/64bit対応
#include <windows.h>
#include <tchar.h>
int WINAPI _tWinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,TCHAR* lpsCmdLine, int nCmdShow){
        MessageBox(0,TEXT("60秒後に冬眠から目覚めます"),TEXT("メッセージ"),MB_YESNO | MB_ICONQUESTION);
        HANDLE timeH = CreateWaitableTimer(NULL, FALSE, NULL);
        LARGE_INTEGER ltime;
        ltime.QuadPart = -10000000*60;          //指定時刻までのタイマー時間を100ns単位で取得 負で指定するのがミソ
        SetWaitableTimer(timeH, <ime, 0, 0, 0, TRUE);
        
        DWORD ret;
    HANDLE hToken;
    LUID    Luid;
    TOKEN_PRIVILEGES    tNew,tPre;
    HANDLE hProcess = GetCurrentProcess();
    OpenProcessToken(hProcess, TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken);
    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &Luid);
    tNew.PrivilegeCount = 1;
    tNew.Privileges[0].Luid = Luid;
    tNew.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(hToken, FALSE, &tNew, sizeof(tPre), &tPre, &ret);
        SetSystemPowerState(FALSE, FALSE);      //      サスペンド
        MessageBox(0,TEXT("おはよう"),TEXT("メッセージ"),MB_YESNO | MB_ICONQUESTION);
        CancelWaitableTimer(timeH);
        CloseHandle(timeH);
return 0;
}