【HSP3】指定した時刻にスタンバイや休止状態から復帰させるモジュール+サンプル

指定した時刻にスタンバイや休止状態から復帰させるスクリプトです。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
//
// 2012114 0210
//
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 ""
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX