山本ワールド
スリープから指定時間に復帰するプログラム(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;
}