休止状態のタグがつけられたコード一覧

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

// 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 "復帰!"

よく投稿されているコード

タグ

最近投稿されたコード