Win32 API 日本語リファレンス
ホームSystem.Power › PPM_WMI_IDLE_STATE

PPM_WMI_IDLE_STATE

構造体
サイズx64: 32 バイト / x86: 32 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
LatencyDWORD4+0+0このアイドル状態から復帰するのに要する遅延時間。
PowerDWORD4+4+4このアイドル状態での消費電力。
TimeCheckDWORD4+8+8この状態へ移行するために必要な最小滞在見込み時間。
PromotePercentBYTE1+12+12より深い状態へ昇格させる使用率しきい値。パーセント。
DemotePercentBYTE1+13+13より浅い状態へ降格させる使用率しきい値。パーセント。
StateTypeBYTE1+14+14アイドル状態の種別(C1/C2/C3など)を示す値。
ReservedBYTE1+15+15将来の拡張用に予約された領域。
StateFlagsDWORD4+16+16このアイドル状態に関するフラグのビット集合。
ContextDWORD4+20+20状態ハンドラに渡されるコンテキスト値。
IdleHandlerDWORD4+24+24アイドル処理ハンドラを示す値。
Reserved1DWORD4+28+28将来の拡張用に予約された領域。

各言語での定義

#include <windows.h>

// PPM_WMI_IDLE_STATE  (x64 32 / x86 32 バイト)
typedef struct PPM_WMI_IDLE_STATE {
    DWORD Latency;
    DWORD Power;
    DWORD TimeCheck;
    BYTE PromotePercent;
    BYTE DemotePercent;
    BYTE StateType;
    BYTE Reserved;
    DWORD StateFlags;
    DWORD Context;
    DWORD IdleHandler;
    DWORD Reserved1;
} PPM_WMI_IDLE_STATE;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PPM_WMI_IDLE_STATE
{
    public uint Latency;
    public uint Power;
    public uint TimeCheck;
    public byte PromotePercent;
    public byte DemotePercent;
    public byte StateType;
    public byte Reserved;
    public uint StateFlags;
    public uint Context;
    public uint IdleHandler;
    public uint Reserved1;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PPM_WMI_IDLE_STATE
    Public Latency As UInteger
    Public Power As UInteger
    Public TimeCheck As UInteger
    Public PromotePercent As Byte
    Public DemotePercent As Byte
    Public StateType As Byte
    Public Reserved As Byte
    Public StateFlags As UInteger
    Public Context As UInteger
    Public IdleHandler As UInteger
    Public Reserved1 As UInteger
End Structure
import ctypes
from ctypes import wintypes

class PPM_WMI_IDLE_STATE(ctypes.Structure):
    _fields_ = [
        ("Latency", wintypes.DWORD),
        ("Power", wintypes.DWORD),
        ("TimeCheck", wintypes.DWORD),
        ("PromotePercent", ctypes.c_ubyte),
        ("DemotePercent", ctypes.c_ubyte),
        ("StateType", ctypes.c_ubyte),
        ("Reserved", ctypes.c_ubyte),
        ("StateFlags", wintypes.DWORD),
        ("Context", wintypes.DWORD),
        ("IdleHandler", wintypes.DWORD),
        ("Reserved1", wintypes.DWORD),
    ]
#[repr(C)]
pub struct PPM_WMI_IDLE_STATE {
    pub Latency: u32,
    pub Power: u32,
    pub TimeCheck: u32,
    pub PromotePercent: u8,
    pub DemotePercent: u8,
    pub StateType: u8,
    pub Reserved: u8,
    pub StateFlags: u32,
    pub Context: u32,
    pub IdleHandler: u32,
    pub Reserved1: u32,
}
import "golang.org/x/sys/windows"

type PPM_WMI_IDLE_STATE struct {
	Latency uint32
	Power uint32
	TimeCheck uint32
	PromotePercent byte
	DemotePercent byte
	StateType byte
	Reserved byte
	StateFlags uint32
	Context uint32
	IdleHandler uint32
	Reserved1 uint32
}
type
  PPM_WMI_IDLE_STATE = record
    Latency: DWORD;
    Power: DWORD;
    TimeCheck: DWORD;
    PromotePercent: Byte;
    DemotePercent: Byte;
    StateType: Byte;
    Reserved: Byte;
    StateFlags: DWORD;
    Context: DWORD;
    IdleHandler: DWORD;
    Reserved1: DWORD;
  end;
const PPM_WMI_IDLE_STATE = extern struct {
    Latency: u32,
    Power: u32,
    TimeCheck: u32,
    PromotePercent: u8,
    DemotePercent: u8,
    StateType: u8,
    Reserved: u8,
    StateFlags: u32,
    Context: u32,
    IdleHandler: u32,
    Reserved1: u32,
};
type
  PPM_WMI_IDLE_STATE {.bycopy.} = object
    Latency: uint32
    Power: uint32
    TimeCheck: uint32
    PromotePercent: uint8
    DemotePercent: uint8
    StateType: uint8
    Reserved: uint8
    StateFlags: uint32
    Context: uint32
    IdleHandler: uint32
    Reserved1: uint32
struct PPM_WMI_IDLE_STATE
{
    uint Latency;
    uint Power;
    uint TimeCheck;
    ubyte PromotePercent;
    ubyte DemotePercent;
    ubyte StateType;
    ubyte Reserved;
    uint StateFlags;
    uint Context;
    uint IdleHandler;
    uint Reserved1;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PPM_WMI_IDLE_STATE サイズ: 32 バイト(x64)
dim st, 8    ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; Latency : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Power : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; TimeCheck : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; PromotePercent : BYTE (+12, 1byte)  poke st,12,値  /  値 = peek(st,12)
; DemotePercent : BYTE (+13, 1byte)  poke st,13,値  /  値 = peek(st,13)
; StateType : BYTE (+14, 1byte)  poke st,14,値  /  値 = peek(st,14)
; Reserved : BYTE (+15, 1byte)  poke st,15,値  /  値 = peek(st,15)
; StateFlags : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; Context : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; IdleHandler : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; Reserved1 : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global PPM_WMI_IDLE_STATE
    #field int Latency
    #field int Power
    #field int TimeCheck
    #field byte PromotePercent
    #field byte DemotePercent
    #field byte StateType
    #field byte Reserved
    #field int StateFlags
    #field int Context
    #field int IdleHandler
    #field int Reserved1
#endstruct

stdim st, PPM_WMI_IDLE_STATE        ; NSTRUCT 変数を確保
st->Latency = 100
mes "Latency=" + st->Latency