ホーム › System.Power › SYSTEM_POWER_POLICY
SYSTEM_POWER_POLICY
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Revision | DWORD | 4 | +0 | +0 | 現在の構造体のリビジョンです。 |
| PowerButton | POWER_ACTION_POLICY | 12 | +4 | +4 | システムの電源ボタンが押されたときに開始するシステム電源アクションを定義する POWER_ACTION_POLICY 構造体です。 |
| SleepButton | POWER_ACTION_POLICY | 12 | +16 | +16 | システムのスリープボタンが押されたときに開始するシステム電源アクションを定義する POWER_ACTION_POLICY 構造体です。 |
| LidClose | POWER_ACTION_POLICY | 12 | +28 | +28 | システムのふた (リッド) が閉じられたときに開始するシステム電源アクションを定義する POWER_ACTION_POLICY 構造体です。 |
| LidOpenWake | SYSTEM_POWER_STATE | 4 | +40 | +40 | ふたを開くイベントによってシステムを復帰させる対象となる、最大の電源状態 (最も大きい Sx 値) です。このメンバーは SYSTEM_POWER_STATE 列挙型の値のいずれかでなければなりません。 |
| Reserved | DWORD | 4 | +44 | +44 | 予約済みです。 |
| Idle | POWER_ACTION_POLICY | 12 | +48 | +48 | システムのアイドルタイマーが満了したときに開始するシステム電源アクションを定義する POWER_ACTION_POLICY 構造体です。 |
| IdleTimeout | DWORD | 4 | +60 | +60 | システムのアイドルタイマーが満了するまでに、システムの活動レベルがアイドル検出のしきい値を下回り続けている必要がある時間を、秒単位で指定します。 |
| IdleSensitivity | BYTE | 1 | +64 | +64 | アイドル検出のしきい値を定めるシステムの活動レベルを、パーセンテージで表した値です。 |
| DynamicThrottle | BYTE | 1 | +65 | +65 | 現在のシステムプロセッサの動的スロットリングポリシーです。このメンバーは Processor Performance Control Policy Constants に記載されている値のいずれかでなければなりません。 |
| Spare2 | BYTE | 2 | +66 | +66 | 予約済みです。 |
| MinSleep | SYSTEM_POWER_STATE | 4 | +68 | +68 | 現在サポートされている最小のシステムスリープ状態 (最も小さい Sx 値) です。このメンバーは SYSTEM_POWER_STATE 列挙型の値のいずれかでなければなりません。 |
| MaxSleep | SYSTEM_POWER_STATE | 4 | +72 | +72 | 現在サポートされている最大のシステムスリープ状態 (最も大きい Sx 値) です。このメンバーは SYSTEM_POWER_STATE 列挙型の値のいずれかでなければなりません。 |
| ReducedLatencySleep | SYSTEM_POWER_STATE | 4 | +76 | +76 | 未処理のレイテンシ要件がある場合に、システムスリープアクションで移行するシステム電源状態 (Sx 値) です。このメンバーは SYSTEM_POWER_STATE 列挙型の値のいずれかでなければなりません。アプリケーションが RequestWakeupLatency を LT_LOWEST_LATENCY を指定して呼び出した場合、MaxSleep の代わりに ReducedLatencySleep が使用されます。 |
| WinLogonFlags | DWORD | 4 | +80 | +80 | このメンバーには 0 または WINLOGON_LOCK_ON_SLEEP (0x00000001) を指定できます。 |
| Spare3 | DWORD | 4 | +84 | +84 | 予約済みです。 |
| DozeS4Timeout | DWORD | 4 | +88 | +88 | サスペンド状態に移行してから休止 (ハイバネート) スリープ状態に移行するまでの待機時間を、秒単位で指定します。0 の場合は、休止状態に移行しないことを示します。 |
| BroadcastCapacityResolution | DWORD | 4 | +92 | +92 | システム電源状態の変更イベントをシステムに通知する契機となる、現在のバッテリー容量の変化の分解能です。 |
| DischargePolicy | SYSTEM_POWER_LEVEL | 96 | +96 | +96 | システムのバッテリー放電イベント発生時に実行するアクションを定義する SYSTEM_POWER_LEVEL 構造体の配列です。 |
| VideoTimeout | DWORD | 4 | +192 | +192 | ディスプレイの電源を切るまでの時間を、秒単位で指定します。 |
| VideoDimDisplay | BOOLEAN | 1 | +196 | +196 | このメンバーが TRUE の場合、システムはディスプレイの輝度低下 (ディミング) をサポートします。 |
| VideoReserved | DWORD | 12 | +200 | +200 | 予約済みです。 |
| SpindownTimeout | DWORD | 4 | +212 | +212 | 固定ディスクドライブへの電源供給を切るまでの時間を、秒単位で指定します。 |
| OptimizeForPower | BOOLEAN | 1 | +216 | +216 | このメンバーが TRUE の場合、パッシブ冷却が指定されていても、システムは冷却ファンを動作させ、プロセッサをフルスピードで実行します。これにより、オペレーティングシステムはファンの使用とプロセッサのフルスピード実行を優先するようになります。 |
| FanThrottleTolerance | BYTE | 1 | +217 | +217 | 熱イベントに応じてシステムファンを動作させる前に、プロセッサをスロットリングによって下げることができる下限値を、パーセンテージで表した値です。 |
| ForcedThrottle | BYTE | 1 | +218 | +218 | システムによって強制されるプロセッサのスロットルレベルを、パーセンテージで表した値です。 |
| MinThrottle | BYTE | 1 | +219 | +219 | プロセッサの最小スロットルレベルを、パーセンテージで表した値です。 |
| OverThrottled | POWER_ACTION_POLICY | 12 | +220 | +220 | プロセッサのスロットリングではシステム温度を十分に下げられない場合に、熱イベントへの応答として開始するシステム電源アクションを定義する POWER_ACTION_POLICY 構造体です。 |
公式ドキュメント
現在のシステム電源ポリシーに関する情報を格納します。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// POWER_ACTION_POLICY (x64 12 / x86 12 バイト)
typedef struct POWER_ACTION_POLICY {
POWER_ACTION Action;
DWORD Flags;
POWER_ACTION_POLICY_EVENT_CODE EventCode;
} POWER_ACTION_POLICY;
// SYSTEM_POWER_LEVEL (x64 24 / x86 24 バイト)
typedef struct SYSTEM_POWER_LEVEL {
BOOLEAN Enable;
BYTE Spare[3];
DWORD BatteryLevel;
POWER_ACTION_POLICY PowerPolicy;
SYSTEM_POWER_STATE MinSystemState;
} SYSTEM_POWER_LEVEL;
// SYSTEM_POWER_POLICY (x64 232 / x86 232 バイト)
typedef struct SYSTEM_POWER_POLICY {
DWORD Revision;
POWER_ACTION_POLICY PowerButton;
POWER_ACTION_POLICY SleepButton;
POWER_ACTION_POLICY LidClose;
SYSTEM_POWER_STATE LidOpenWake;
DWORD Reserved;
POWER_ACTION_POLICY Idle;
DWORD IdleTimeout;
BYTE IdleSensitivity;
BYTE DynamicThrottle;
BYTE Spare2[2];
SYSTEM_POWER_STATE MinSleep;
SYSTEM_POWER_STATE MaxSleep;
SYSTEM_POWER_STATE ReducedLatencySleep;
DWORD WinLogonFlags;
DWORD Spare3;
DWORD DozeS4Timeout;
DWORD BroadcastCapacityResolution;
SYSTEM_POWER_LEVEL DischargePolicy[4];
DWORD VideoTimeout;
BOOLEAN VideoDimDisplay;
DWORD VideoReserved[3];
DWORD SpindownTimeout;
BOOLEAN OptimizeForPower;
BYTE FanThrottleTolerance;
BYTE ForcedThrottle;
BYTE MinThrottle;
POWER_ACTION_POLICY OverThrottled;
} SYSTEM_POWER_POLICY;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct POWER_ACTION_POLICY
{
public int Action;
public uint Flags;
public uint EventCode;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SYSTEM_POWER_LEVEL
{
[MarshalAs(UnmanagedType.U1)] public bool Enable;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] Spare;
public uint BatteryLevel;
public POWER_ACTION_POLICY PowerPolicy;
public int MinSystemState;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SYSTEM_POWER_POLICY
{
public uint Revision;
public POWER_ACTION_POLICY PowerButton;
public POWER_ACTION_POLICY SleepButton;
public POWER_ACTION_POLICY LidClose;
public int LidOpenWake;
public uint Reserved;
public POWER_ACTION_POLICY Idle;
public uint IdleTimeout;
public byte IdleSensitivity;
public byte DynamicThrottle;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] Spare2;
public int MinSleep;
public int MaxSleep;
public int ReducedLatencySleep;
public uint WinLogonFlags;
public uint Spare3;
public uint DozeS4Timeout;
public uint BroadcastCapacityResolution;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public SYSTEM_POWER_LEVEL[] DischargePolicy;
public uint VideoTimeout;
[MarshalAs(UnmanagedType.U1)] public bool VideoDimDisplay;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public uint[] VideoReserved;
public uint SpindownTimeout;
[MarshalAs(UnmanagedType.U1)] public bool OptimizeForPower;
public byte FanThrottleTolerance;
public byte ForcedThrottle;
public byte MinThrottle;
public POWER_ACTION_POLICY OverThrottled;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure POWER_ACTION_POLICY
Public Action As Integer
Public Flags As UInteger
Public EventCode As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SYSTEM_POWER_LEVEL
<MarshalAs(UnmanagedType.U1)> Public Enable As Boolean
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> Public Spare() As Byte
Public BatteryLevel As UInteger
Public PowerPolicy As POWER_ACTION_POLICY
Public MinSystemState As Integer
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SYSTEM_POWER_POLICY
Public Revision As UInteger
Public PowerButton As POWER_ACTION_POLICY
Public SleepButton As POWER_ACTION_POLICY
Public LidClose As POWER_ACTION_POLICY
Public LidOpenWake As Integer
Public Reserved As UInteger
Public Idle As POWER_ACTION_POLICY
Public IdleTimeout As UInteger
Public IdleSensitivity As Byte
Public DynamicThrottle As Byte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public Spare2() As Byte
Public MinSleep As Integer
Public MaxSleep As Integer
Public ReducedLatencySleep As Integer
Public WinLogonFlags As UInteger
Public Spare3 As UInteger
Public DozeS4Timeout As UInteger
Public BroadcastCapacityResolution As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Public DischargePolicy() As SYSTEM_POWER_LEVEL
Public VideoTimeout As UInteger
<MarshalAs(UnmanagedType.U1)> Public VideoDimDisplay As Boolean
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> Public VideoReserved() As UInteger
Public SpindownTimeout As UInteger
<MarshalAs(UnmanagedType.U1)> Public OptimizeForPower As Boolean
Public FanThrottleTolerance As Byte
Public ForcedThrottle As Byte
Public MinThrottle As Byte
Public OverThrottled As POWER_ACTION_POLICY
End Structureimport ctypes
from ctypes import wintypes
class POWER_ACTION_POLICY(ctypes.Structure):
_fields_ = [
("Action", ctypes.c_int),
("Flags", wintypes.DWORD),
("EventCode", wintypes.DWORD),
]
class SYSTEM_POWER_LEVEL(ctypes.Structure):
_fields_ = [
("Enable", ctypes.c_byte),
("Spare", ctypes.c_ubyte * 3),
("BatteryLevel", wintypes.DWORD),
("PowerPolicy", POWER_ACTION_POLICY),
("MinSystemState", ctypes.c_int),
]
class SYSTEM_POWER_POLICY(ctypes.Structure):
_fields_ = [
("Revision", wintypes.DWORD),
("PowerButton", POWER_ACTION_POLICY),
("SleepButton", POWER_ACTION_POLICY),
("LidClose", POWER_ACTION_POLICY),
("LidOpenWake", ctypes.c_int),
("Reserved", wintypes.DWORD),
("Idle", POWER_ACTION_POLICY),
("IdleTimeout", wintypes.DWORD),
("IdleSensitivity", ctypes.c_ubyte),
("DynamicThrottle", ctypes.c_ubyte),
("Spare2", ctypes.c_ubyte * 2),
("MinSleep", ctypes.c_int),
("MaxSleep", ctypes.c_int),
("ReducedLatencySleep", ctypes.c_int),
("WinLogonFlags", wintypes.DWORD),
("Spare3", wintypes.DWORD),
("DozeS4Timeout", wintypes.DWORD),
("BroadcastCapacityResolution", wintypes.DWORD),
("DischargePolicy", SYSTEM_POWER_LEVEL * 4),
("VideoTimeout", wintypes.DWORD),
("VideoDimDisplay", ctypes.c_byte),
("VideoReserved", wintypes.DWORD * 3),
("SpindownTimeout", wintypes.DWORD),
("OptimizeForPower", ctypes.c_byte),
("FanThrottleTolerance", ctypes.c_ubyte),
("ForcedThrottle", ctypes.c_ubyte),
("MinThrottle", ctypes.c_ubyte),
("OverThrottled", POWER_ACTION_POLICY),
]#[repr(C)]
pub struct POWER_ACTION_POLICY {
pub Action: i32,
pub Flags: u32,
pub EventCode: u32,
}
#[repr(C)]
pub struct SYSTEM_POWER_LEVEL {
pub Enable: u8,
pub Spare: [u8; 3],
pub BatteryLevel: u32,
pub PowerPolicy: POWER_ACTION_POLICY,
pub MinSystemState: i32,
}
#[repr(C)]
pub struct SYSTEM_POWER_POLICY {
pub Revision: u32,
pub PowerButton: POWER_ACTION_POLICY,
pub SleepButton: POWER_ACTION_POLICY,
pub LidClose: POWER_ACTION_POLICY,
pub LidOpenWake: i32,
pub Reserved: u32,
pub Idle: POWER_ACTION_POLICY,
pub IdleTimeout: u32,
pub IdleSensitivity: u8,
pub DynamicThrottle: u8,
pub Spare2: [u8; 2],
pub MinSleep: i32,
pub MaxSleep: i32,
pub ReducedLatencySleep: i32,
pub WinLogonFlags: u32,
pub Spare3: u32,
pub DozeS4Timeout: u32,
pub BroadcastCapacityResolution: u32,
pub DischargePolicy: [SYSTEM_POWER_LEVEL; 4],
pub VideoTimeout: u32,
pub VideoDimDisplay: u8,
pub VideoReserved: [u32; 3],
pub SpindownTimeout: u32,
pub OptimizeForPower: u8,
pub FanThrottleTolerance: u8,
pub ForcedThrottle: u8,
pub MinThrottle: u8,
pub OverThrottled: POWER_ACTION_POLICY,
}import "golang.org/x/sys/windows"
type POWER_ACTION_POLICY struct {
Action int32
Flags uint32
EventCode uint32
}
type SYSTEM_POWER_LEVEL struct {
Enable byte
Spare [3]byte
BatteryLevel uint32
PowerPolicy POWER_ACTION_POLICY
MinSystemState int32
}
type SYSTEM_POWER_POLICY struct {
Revision uint32
PowerButton POWER_ACTION_POLICY
SleepButton POWER_ACTION_POLICY
LidClose POWER_ACTION_POLICY
LidOpenWake int32
Reserved uint32
Idle POWER_ACTION_POLICY
IdleTimeout uint32
IdleSensitivity byte
DynamicThrottle byte
Spare2 [2]byte
MinSleep int32
MaxSleep int32
ReducedLatencySleep int32
WinLogonFlags uint32
Spare3 uint32
DozeS4Timeout uint32
BroadcastCapacityResolution uint32
DischargePolicy [4]SYSTEM_POWER_LEVEL
VideoTimeout uint32
VideoDimDisplay byte
VideoReserved [3]uint32
SpindownTimeout uint32
OptimizeForPower byte
FanThrottleTolerance byte
ForcedThrottle byte
MinThrottle byte
OverThrottled POWER_ACTION_POLICY
}type
POWER_ACTION_POLICY = record
Action: Integer;
Flags: DWORD;
EventCode: DWORD;
end;
SYSTEM_POWER_LEVEL = record
Enable: ByteBool;
Spare: array[0..2] of Byte;
BatteryLevel: DWORD;
PowerPolicy: POWER_ACTION_POLICY;
MinSystemState: Integer;
end;
SYSTEM_POWER_POLICY = record
Revision: DWORD;
PowerButton: POWER_ACTION_POLICY;
SleepButton: POWER_ACTION_POLICY;
LidClose: POWER_ACTION_POLICY;
LidOpenWake: Integer;
Reserved: DWORD;
Idle: POWER_ACTION_POLICY;
IdleTimeout: DWORD;
IdleSensitivity: Byte;
DynamicThrottle: Byte;
Spare2: array[0..1] of Byte;
MinSleep: Integer;
MaxSleep: Integer;
ReducedLatencySleep: Integer;
WinLogonFlags: DWORD;
Spare3: DWORD;
DozeS4Timeout: DWORD;
BroadcastCapacityResolution: DWORD;
DischargePolicy: array[0..3] of SYSTEM_POWER_LEVEL;
VideoTimeout: DWORD;
VideoDimDisplay: ByteBool;
VideoReserved: array[0..2] of DWORD;
SpindownTimeout: DWORD;
OptimizeForPower: ByteBool;
FanThrottleTolerance: Byte;
ForcedThrottle: Byte;
MinThrottle: Byte;
OverThrottled: POWER_ACTION_POLICY;
end;const POWER_ACTION_POLICY = extern struct {
Action: i32,
Flags: u32,
EventCode: u32,
};
const SYSTEM_POWER_LEVEL = extern struct {
Enable: u8,
Spare: [3]u8,
BatteryLevel: u32,
PowerPolicy: POWER_ACTION_POLICY,
MinSystemState: i32,
};
const SYSTEM_POWER_POLICY = extern struct {
Revision: u32,
PowerButton: POWER_ACTION_POLICY,
SleepButton: POWER_ACTION_POLICY,
LidClose: POWER_ACTION_POLICY,
LidOpenWake: i32,
Reserved: u32,
Idle: POWER_ACTION_POLICY,
IdleTimeout: u32,
IdleSensitivity: u8,
DynamicThrottle: u8,
Spare2: [2]u8,
MinSleep: i32,
MaxSleep: i32,
ReducedLatencySleep: i32,
WinLogonFlags: u32,
Spare3: u32,
DozeS4Timeout: u32,
BroadcastCapacityResolution: u32,
DischargePolicy: [4]SYSTEM_POWER_LEVEL,
VideoTimeout: u32,
VideoDimDisplay: u8,
VideoReserved: [3]u32,
SpindownTimeout: u32,
OptimizeForPower: u8,
FanThrottleTolerance: u8,
ForcedThrottle: u8,
MinThrottle: u8,
OverThrottled: POWER_ACTION_POLICY,
};type
POWER_ACTION_POLICY {.bycopy.} = object
Action: int32
Flags: uint32
EventCode: uint32
SYSTEM_POWER_LEVEL {.bycopy.} = object
Enable: uint8
Spare: array[3, uint8]
BatteryLevel: uint32
PowerPolicy: POWER_ACTION_POLICY
MinSystemState: int32
SYSTEM_POWER_POLICY {.bycopy.} = object
Revision: uint32
PowerButton: POWER_ACTION_POLICY
SleepButton: POWER_ACTION_POLICY
LidClose: POWER_ACTION_POLICY
LidOpenWake: int32
Reserved: uint32
Idle: POWER_ACTION_POLICY
IdleTimeout: uint32
IdleSensitivity: uint8
DynamicThrottle: uint8
Spare2: array[2, uint8]
MinSleep: int32
MaxSleep: int32
ReducedLatencySleep: int32
WinLogonFlags: uint32
Spare3: uint32
DozeS4Timeout: uint32
BroadcastCapacityResolution: uint32
DischargePolicy: array[4, SYSTEM_POWER_LEVEL]
VideoTimeout: uint32
VideoDimDisplay: uint8
VideoReserved: array[3, uint32]
SpindownTimeout: uint32
OptimizeForPower: uint8
FanThrottleTolerance: uint8
ForcedThrottle: uint8
MinThrottle: uint8
OverThrottled: POWER_ACTION_POLICYstruct POWER_ACTION_POLICY
{
int Action;
uint Flags;
uint EventCode;
}
struct SYSTEM_POWER_LEVEL
{
ubyte Enable;
ubyte[3] Spare;
uint BatteryLevel;
POWER_ACTION_POLICY PowerPolicy;
int MinSystemState;
}
struct SYSTEM_POWER_POLICY
{
uint Revision;
POWER_ACTION_POLICY PowerButton;
POWER_ACTION_POLICY SleepButton;
POWER_ACTION_POLICY LidClose;
int LidOpenWake;
uint Reserved;
POWER_ACTION_POLICY Idle;
uint IdleTimeout;
ubyte IdleSensitivity;
ubyte DynamicThrottle;
ubyte[2] Spare2;
int MinSleep;
int MaxSleep;
int ReducedLatencySleep;
uint WinLogonFlags;
uint Spare3;
uint DozeS4Timeout;
uint BroadcastCapacityResolution;
SYSTEM_POWER_LEVEL[4] DischargePolicy;
uint VideoTimeout;
ubyte VideoDimDisplay;
uint[3] VideoReserved;
uint SpindownTimeout;
ubyte OptimizeForPower;
ubyte FanThrottleTolerance;
ubyte ForcedThrottle;
ubyte MinThrottle;
POWER_ACTION_POLICY OverThrottled;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SYSTEM_POWER_POLICY サイズ: 232 バイト(x64)
dim st, 58 ; 4byte整数×58(構造体サイズ 232 / 4 切り上げ)
; Revision : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; PowerButton : POWER_ACTION_POLICY (+4, 12byte) varptr(st)+4 を基点に操作(12byte:入れ子/配列)
; SleepButton : POWER_ACTION_POLICY (+16, 12byte) varptr(st)+16 を基点に操作(12byte:入れ子/配列)
; LidClose : POWER_ACTION_POLICY (+28, 12byte) varptr(st)+28 を基点に操作(12byte:入れ子/配列)
; LidOpenWake : SYSTEM_POWER_STATE (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; Reserved : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; Idle : POWER_ACTION_POLICY (+48, 12byte) varptr(st)+48 を基点に操作(12byte:入れ子/配列)
; IdleTimeout : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; IdleSensitivity : BYTE (+64, 1byte) poke st,64,値 / 値 = peek(st,64)
; DynamicThrottle : BYTE (+65, 1byte) poke st,65,値 / 値 = peek(st,65)
; Spare2 : BYTE (+66, 2byte) varptr(st)+66 を基点に操作(2byte:入れ子/配列)
; MinSleep : SYSTEM_POWER_STATE (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; MaxSleep : SYSTEM_POWER_STATE (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; ReducedLatencySleep : SYSTEM_POWER_STATE (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; WinLogonFlags : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; Spare3 : DWORD (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; DozeS4Timeout : DWORD (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; BroadcastCapacityResolution : DWORD (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; DischargePolicy : SYSTEM_POWER_LEVEL (+96, 96byte) varptr(st)+96 を基点に操作(96byte:入れ子/配列)
; VideoTimeout : DWORD (+192, 4byte) st.48 = 値 / 値 = st.48 (lpoke/lpeek も可)
; VideoDimDisplay : BOOLEAN (+196, 1byte) poke st,196,値 / 値 = peek(st,196)
; VideoReserved : DWORD (+200, 12byte) varptr(st)+200 を基点に操作(12byte:入れ子/配列)
; SpindownTimeout : DWORD (+212, 4byte) st.53 = 値 / 値 = st.53 (lpoke/lpeek も可)
; OptimizeForPower : BOOLEAN (+216, 1byte) poke st,216,値 / 値 = peek(st,216)
; FanThrottleTolerance : BYTE (+217, 1byte) poke st,217,値 / 値 = peek(st,217)
; ForcedThrottle : BYTE (+218, 1byte) poke st,218,値 / 値 = peek(st,218)
; MinThrottle : BYTE (+219, 1byte) poke st,219,値 / 値 = peek(st,219)
; OverThrottled : POWER_ACTION_POLICY (+220, 12byte) varptr(st)+220 を基点に操作(12byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global POWER_ACTION_POLICY
#field int Action
#field int Flags
#field int EventCode
#endstruct
#defstruct global SYSTEM_POWER_LEVEL
#field bool1 Enable
#field byte Spare 3
#field int BatteryLevel
#field POWER_ACTION_POLICY PowerPolicy
#field int MinSystemState
#endstruct
#defstruct global SYSTEM_POWER_POLICY
#field int Revision
#field POWER_ACTION_POLICY PowerButton
#field POWER_ACTION_POLICY SleepButton
#field POWER_ACTION_POLICY LidClose
#field int LidOpenWake
#field int Reserved
#field POWER_ACTION_POLICY Idle
#field int IdleTimeout
#field byte IdleSensitivity
#field byte DynamicThrottle
#field byte Spare2 2
#field int MinSleep
#field int MaxSleep
#field int ReducedLatencySleep
#field int WinLogonFlags
#field int Spare3
#field int DozeS4Timeout
#field int BroadcastCapacityResolution
#field SYSTEM_POWER_LEVEL DischargePolicy 4
#field int VideoTimeout
#field bool1 VideoDimDisplay
#field int VideoReserved 3
#field int SpindownTimeout
#field bool1 OptimizeForPower
#field byte FanThrottleTolerance
#field byte ForcedThrottle
#field byte MinThrottle
#field POWER_ACTION_POLICY OverThrottled
#endstruct
stdim st, SYSTEM_POWER_POLICY ; NSTRUCT 変数を確保
st->Revision = 100
mes "Revision=" + st->Revision