指定した時刻にスタンバイや休止状態から復帰させるスクリプトです。SetWaitTimer で復帰時刻を指定してください。現在時刻より前ですと復帰しませんのでご注意を。また SetPrivileges で一度だけ権限を昇格させる必要があります。
指定した時刻にスタンバイや休止状態から復帰させるスクリプトです。SetWaitTimer で復帰時刻を指定してください。現在時刻より前ですと復帰しませんのでご注意を。また SetPrivileges で一度だけ権限を昇格させる必要があります。
// http://web.archive.org/web/20060511161900/http://www.apple.ac/~namasoft/codebank/delphi2.php #include "kernel32.as" #include "user32.as" #module _st_ #uselib "advapi32.dll" #func OpenProcessToken "OpenProcessToken" int, int, var #func LookupPrivilegeValue "LookupPrivilegeValueA" sptr, sptr, var #func AdjustTokenPrivileges "AdjustTokenPrivileges" int, int, var, int, int, int #uselib "powrprof.dll" #func SetSuspendState "SetSuspendState" int,int,int #define EWX_LOGOFF 0 // ログオフ #define EWX_SHUTDOWN 1 // シャットダウン #define EWX_REBOOT 2 // 再起動 #define EWX_FORCE 4 // 強制 #define EWX_POWEROFF 8 // 電源を切る #define TOKEN_QUERY 0x08 #define TOKEN_ADJUST_PRIVILEGES 0x20 #define SE_SHUTDOWN_NAME "SeShutdownPrivilege" #define SE_PRIVILEGE_ENABLED 0x02 #deffunc SetWaitTimer int y, int m, int d, int h, int min, int s if hTimer != 0 : return -1 dim systime, 4 dim filetime, 2 dim utctime, 2 wpoke systime, 0, y wpoke systime, 2, m wpoke systime, 6, d wpoke systime, 8, h wpoke systime, 10, min wpoke systime, 12, s wpoke systime, 14, 0 SystemTimeToFileTime varptr(systime), varptr(filetime) LocalFileTimeToFileTime varptr(filetime), varptr(utctime) CreateWaitableTimer 0, 0, 0 hTimer = stat SetWaitableTimer hTimer, varptr(utctime), 0, 0, 0, 1 return #deffunc SetSystemPower int mode, int force f = 0 if force == 1 : f = EWX_FORCE switch mode case 0 // ログオフ ExitWindowsEx (f + EWX_LOGOFF), 0 swbreak case 1 // シャットダウン ExitWindowsEx (f + EWX_SHUTDOWN), 0 swbreak case 2 // 再起動 ExitWindowsEx (f + EWX_REBOOT), 0 swbreak case 3 // 電源を切る ExitWindowsEx (f + EWX_POWEROFF), 0 swbreak case 4 // 休止状態 SetSuspendState 1, 0, 0 swbreak case 5 // スタンバイ SetSuspendState 0, 0, 0 swbreak case 6 // 休止状態(自動復帰しない様子) SetSystemPowerState 0, force swbreak case 7 // スタンバイ(自動復帰しない様子) SetSystemPowerState 1, force swbreak swend return stat // 待機用 #deffunc SetWaitForSingleObject if hTimer == 0 : return -1 WaitForSingleObject hTimer, 0xFFFFFFFF SetThreadExecutionState 0x00000001 | 0x00000002 CloseHandle hTimer if stat != 0 : hTimer = 0 return 0 // タイマーのクリア #deffunc ClearTimer if hTimer == 0 : return -1 CloseHandle hTimer if stat != 0 : hTimer = 0 : return 0 return -1 // 権限昇格 #deffunc SetPrivileges dim Luid, 2 dim tokenNew, 16 dim tokenPre, 16 GetCurrentProcess hProcess = stat OpenProcessToken hProcess, TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, hToken if stat == 0 : return -1 LookupPrivilegeValue 0, SE_SHUTDOWN_NAME, Luid if stat == 0 : return -2 tokenNew(0) = 1 memcpy tokenNew(1), Luid, 8 tokenNew(3) = SE_PRIVILEGE_ENABLED AdjustTokenPrivileges hToken, 0, tokenNew, 16, varptr(tokenPre), varptr(ret) if stat == 0 : return -3 return 0 #global // サンプル // 一度は権限昇格させる SetPrivileges // 復帰時刻を指定 // 以下の例は 2012年1月14日 0時21分0秒 に復帰させるために指定 // 現在時刻より前の時刻ですと復帰しませんので注意! SetWaitTimer 2012, 1, 14, 0, 21, 0 // スタンバイしてみる ; 第1引数のパラメータ ; 0 = ログオフ ; 1 = シャットダウン ; 2 = 再起動 ; 3 = 電源を切る ; 4 = 休止状態 ; 5 = スタンバイ ; 6 = 休止状態(自動復帰しない) ; 7 = スタンバイ(自動復帰しない) ; 第2引数は強制するかどうか? ; 1 を指定すると強制モード、0 だと強制しない SetSystemPower 5, 1 // SetSystemPower を実行後↓処理してください SetWaitForSingleObject // タイマーのクリア(正常に処理された場合は必要なし) ;ClearTimer dialog "復帰!"