Win32 API 日本語リファレンス
ホームGraphics.Dwm › DWM_TIMING_INFO

DWM_TIMING_INFO

構造体
サイズx64: 292 バイト / x86: 292 バイトパッキング1

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

フィールド

フィールドサイズx64x86説明
cbSizeDWORD4+0+0この構造体のサイズ(バイト数)。呼び出し前に設定する。
rateRefreshUNSIGNED_RATIO8+4+4モニターのリフレッシュレートを分数で表す値。
qpcRefreshPeriodULONGLONG8+12+12リフレッシュ周期をQPCカウント単位で表す値。
rateComposeUNSIGNED_RATIO8+20+20DWMの合成レートを分数で表す値。
qpcVBlankULONGLONG8+28+28直近の垂直帰線(VBlank)時刻をQPCカウントで表す値。
cRefreshULONGLONG8+36+36システム開始以降のリフレッシュ累積回数。
cDXRefreshDWORD4+44+44DirectXのリフレッシュ累積カウント。
qpcComposeULONGLONG8+48+48直近のフレーム合成時刻をQPCカウントで表す値。
cFrameULONGLONG8+56+56合成されたフレームの累積数。
cDXPresentDWORD4+64+64DirectXのPresent呼び出し累積回数。
cRefreshFrameULONGLONG8+68+68現フレームが合成されたときのリフレッシュカウント。
cFrameSubmittedULONGLONG8+76+76DWMに送信されたフレームの累積数。
cDXPresentSubmittedDWORD4+84+84送信されたDirectX Presentの累積カウント。
cFrameConfirmedULONGLONG8+88+88画面に確実に表示されたフレームの累積数。
cDXPresentConfirmedDWORD4+96+96確認されたDirectX Presentの累積カウント。
cRefreshConfirmedULONGLONG8+100+100フレーム確認時のリフレッシュ累積カウント。
cDXRefreshConfirmedDWORD4+108+108確認されたDirectXリフレッシュの累積カウント。
cFramesLateULONGLONG8+112+112予定より遅延して表示されたフレーム数。
cFramesOutstandingDWORD4+120+120まだ表示されていない未処理フレーム数。
cFrameDisplayedULONGLONG8+124+124最後に表示されたフレームの番号。
qpcFrameDisplayedULONGLONG8+132+132最後にフレームが表示された時刻をQPCカウントで表す値。
cRefreshFrameDisplayedULONGLONG8+140+140フレーム表示時のリフレッシュカウント。
cFrameCompleteULONGLONG8+148+148完了した最後のフレーム番号。
qpcFrameCompleteULONGLONG8+156+156フレームが完了した時刻をQPCカウントで表す値。
cFramePendingULONGLONG8+164+164保留中の最後のフレーム番号。
qpcFramePendingULONGLONG8+172+172フレームが保留になった時刻をQPCカウントで表す値。
cFramesDisplayedULONGLONG8+180+180表示されたフレームの累積数。
cFramesCompleteULONGLONG8+188+188完了したフレームの累積数。
cFramesPendingULONGLONG8+196+196保留中フレームの累積数。
cFramesAvailableULONGLONG8+204+204利用可能なフレームの累積数。
cFramesDroppedULONGLONG8+212+212破棄(ドロップ)されたフレームの累積数。
cFramesMissedULONGLONG8+220+220表示機会を逃したフレームの累積数。
cRefreshNextDisplayedULONGLONG8+228+228次に表示予定のフレームのリフレッシュカウント。
cRefreshNextPresentedULONGLONG8+236+236次にPresent予定のフレームのリフレッシュカウント。
cRefreshesDisplayedULONGLONG8+244+244表示されたフレームが占めたリフレッシュ累積数。
cRefreshesPresentedULONGLONG8+252+252Presentされたフレームが占めたリフレッシュ累積数。
cRefreshStartedULONGLONG8+260+260合成が開始されたリフレッシュ累積カウント。
cPixelsReceivedULONGLONG8+268+268DWMが受け取ったピクセルの累積数。
cPixelsDrawnULONGLONG8+276+276DWMが描画したピクセルの累積数。
cBuffersEmptyULONGLONG8+284+284フリップキューが空であった累積回数。

各言語での定義

#include <windows.h>

// UNSIGNED_RATIO  (x64 8 / x86 8 バイト)
#pragma pack(push, 1)
typedef struct UNSIGNED_RATIO {
    DWORD uiNumerator;
    DWORD uiDenominator;
} UNSIGNED_RATIO;
#pragma pack(pop)

// DWM_TIMING_INFO  (x64 292 / x86 292 バイト)
#pragma pack(push, 1)
typedef struct DWM_TIMING_INFO {
    DWORD cbSize;
    UNSIGNED_RATIO rateRefresh;
    ULONGLONG qpcRefreshPeriod;
    UNSIGNED_RATIO rateCompose;
    ULONGLONG qpcVBlank;
    ULONGLONG cRefresh;
    DWORD cDXRefresh;
    ULONGLONG qpcCompose;
    ULONGLONG cFrame;
    DWORD cDXPresent;
    ULONGLONG cRefreshFrame;
    ULONGLONG cFrameSubmitted;
    DWORD cDXPresentSubmitted;
    ULONGLONG cFrameConfirmed;
    DWORD cDXPresentConfirmed;
    ULONGLONG cRefreshConfirmed;
    DWORD cDXRefreshConfirmed;
    ULONGLONG cFramesLate;
    DWORD cFramesOutstanding;
    ULONGLONG cFrameDisplayed;
    ULONGLONG qpcFrameDisplayed;
    ULONGLONG cRefreshFrameDisplayed;
    ULONGLONG cFrameComplete;
    ULONGLONG qpcFrameComplete;
    ULONGLONG cFramePending;
    ULONGLONG qpcFramePending;
    ULONGLONG cFramesDisplayed;
    ULONGLONG cFramesComplete;
    ULONGLONG cFramesPending;
    ULONGLONG cFramesAvailable;
    ULONGLONG cFramesDropped;
    ULONGLONG cFramesMissed;
    ULONGLONG cRefreshNextDisplayed;
    ULONGLONG cRefreshNextPresented;
    ULONGLONG cRefreshesDisplayed;
    ULONGLONG cRefreshesPresented;
    ULONGLONG cRefreshStarted;
    ULONGLONG cPixelsReceived;
    ULONGLONG cPixelsDrawn;
    ULONGLONG cBuffersEmpty;
} DWM_TIMING_INFO;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct UNSIGNED_RATIO
{
    public uint uiNumerator;
    public uint uiDenominator;
}

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct DWM_TIMING_INFO
{
    public uint cbSize;
    public UNSIGNED_RATIO rateRefresh;
    public ulong qpcRefreshPeriod;
    public UNSIGNED_RATIO rateCompose;
    public ulong qpcVBlank;
    public ulong cRefresh;
    public uint cDXRefresh;
    public ulong qpcCompose;
    public ulong cFrame;
    public uint cDXPresent;
    public ulong cRefreshFrame;
    public ulong cFrameSubmitted;
    public uint cDXPresentSubmitted;
    public ulong cFrameConfirmed;
    public uint cDXPresentConfirmed;
    public ulong cRefreshConfirmed;
    public uint cDXRefreshConfirmed;
    public ulong cFramesLate;
    public uint cFramesOutstanding;
    public ulong cFrameDisplayed;
    public ulong qpcFrameDisplayed;
    public ulong cRefreshFrameDisplayed;
    public ulong cFrameComplete;
    public ulong qpcFrameComplete;
    public ulong cFramePending;
    public ulong qpcFramePending;
    public ulong cFramesDisplayed;
    public ulong cFramesComplete;
    public ulong cFramesPending;
    public ulong cFramesAvailable;
    public ulong cFramesDropped;
    public ulong cFramesMissed;
    public ulong cRefreshNextDisplayed;
    public ulong cRefreshNextPresented;
    public ulong cRefreshesDisplayed;
    public ulong cRefreshesPresented;
    public ulong cRefreshStarted;
    public ulong cPixelsReceived;
    public ulong cPixelsDrawn;
    public ulong cBuffersEmpty;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure UNSIGNED_RATIO
    Public uiNumerator As UInteger
    Public uiDenominator As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure DWM_TIMING_INFO
    Public cbSize As UInteger
    Public rateRefresh As UNSIGNED_RATIO
    Public qpcRefreshPeriod As ULong
    Public rateCompose As UNSIGNED_RATIO
    Public qpcVBlank As ULong
    Public cRefresh As ULong
    Public cDXRefresh As UInteger
    Public qpcCompose As ULong
    Public cFrame As ULong
    Public cDXPresent As UInteger
    Public cRefreshFrame As ULong
    Public cFrameSubmitted As ULong
    Public cDXPresentSubmitted As UInteger
    Public cFrameConfirmed As ULong
    Public cDXPresentConfirmed As UInteger
    Public cRefreshConfirmed As ULong
    Public cDXRefreshConfirmed As UInteger
    Public cFramesLate As ULong
    Public cFramesOutstanding As UInteger
    Public cFrameDisplayed As ULong
    Public qpcFrameDisplayed As ULong
    Public cRefreshFrameDisplayed As ULong
    Public cFrameComplete As ULong
    Public qpcFrameComplete As ULong
    Public cFramePending As ULong
    Public qpcFramePending As ULong
    Public cFramesDisplayed As ULong
    Public cFramesComplete As ULong
    Public cFramesPending As ULong
    Public cFramesAvailable As ULong
    Public cFramesDropped As ULong
    Public cFramesMissed As ULong
    Public cRefreshNextDisplayed As ULong
    Public cRefreshNextPresented As ULong
    Public cRefreshesDisplayed As ULong
    Public cRefreshesPresented As ULong
    Public cRefreshStarted As ULong
    Public cPixelsReceived As ULong
    Public cPixelsDrawn As ULong
    Public cBuffersEmpty As ULong
End Structure
import ctypes
from ctypes import wintypes

class UNSIGNED_RATIO(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("uiNumerator", wintypes.DWORD),
        ("uiDenominator", wintypes.DWORD),
    ]

class DWM_TIMING_INFO(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("cbSize", wintypes.DWORD),
        ("rateRefresh", UNSIGNED_RATIO),
        ("qpcRefreshPeriod", ctypes.c_ulonglong),
        ("rateCompose", UNSIGNED_RATIO),
        ("qpcVBlank", ctypes.c_ulonglong),
        ("cRefresh", ctypes.c_ulonglong),
        ("cDXRefresh", wintypes.DWORD),
        ("qpcCompose", ctypes.c_ulonglong),
        ("cFrame", ctypes.c_ulonglong),
        ("cDXPresent", wintypes.DWORD),
        ("cRefreshFrame", ctypes.c_ulonglong),
        ("cFrameSubmitted", ctypes.c_ulonglong),
        ("cDXPresentSubmitted", wintypes.DWORD),
        ("cFrameConfirmed", ctypes.c_ulonglong),
        ("cDXPresentConfirmed", wintypes.DWORD),
        ("cRefreshConfirmed", ctypes.c_ulonglong),
        ("cDXRefreshConfirmed", wintypes.DWORD),
        ("cFramesLate", ctypes.c_ulonglong),
        ("cFramesOutstanding", wintypes.DWORD),
        ("cFrameDisplayed", ctypes.c_ulonglong),
        ("qpcFrameDisplayed", ctypes.c_ulonglong),
        ("cRefreshFrameDisplayed", ctypes.c_ulonglong),
        ("cFrameComplete", ctypes.c_ulonglong),
        ("qpcFrameComplete", ctypes.c_ulonglong),
        ("cFramePending", ctypes.c_ulonglong),
        ("qpcFramePending", ctypes.c_ulonglong),
        ("cFramesDisplayed", ctypes.c_ulonglong),
        ("cFramesComplete", ctypes.c_ulonglong),
        ("cFramesPending", ctypes.c_ulonglong),
        ("cFramesAvailable", ctypes.c_ulonglong),
        ("cFramesDropped", ctypes.c_ulonglong),
        ("cFramesMissed", ctypes.c_ulonglong),
        ("cRefreshNextDisplayed", ctypes.c_ulonglong),
        ("cRefreshNextPresented", ctypes.c_ulonglong),
        ("cRefreshesDisplayed", ctypes.c_ulonglong),
        ("cRefreshesPresented", ctypes.c_ulonglong),
        ("cRefreshStarted", ctypes.c_ulonglong),
        ("cPixelsReceived", ctypes.c_ulonglong),
        ("cPixelsDrawn", ctypes.c_ulonglong),
        ("cBuffersEmpty", ctypes.c_ulonglong),
    ]
#[repr(C, packed(1))]
pub struct UNSIGNED_RATIO {
    pub uiNumerator: u32,
    pub uiDenominator: u32,
}

#[repr(C, packed(1))]
pub struct DWM_TIMING_INFO {
    pub cbSize: u32,
    pub rateRefresh: UNSIGNED_RATIO,
    pub qpcRefreshPeriod: u64,
    pub rateCompose: UNSIGNED_RATIO,
    pub qpcVBlank: u64,
    pub cRefresh: u64,
    pub cDXRefresh: u32,
    pub qpcCompose: u64,
    pub cFrame: u64,
    pub cDXPresent: u32,
    pub cRefreshFrame: u64,
    pub cFrameSubmitted: u64,
    pub cDXPresentSubmitted: u32,
    pub cFrameConfirmed: u64,
    pub cDXPresentConfirmed: u32,
    pub cRefreshConfirmed: u64,
    pub cDXRefreshConfirmed: u32,
    pub cFramesLate: u64,
    pub cFramesOutstanding: u32,
    pub cFrameDisplayed: u64,
    pub qpcFrameDisplayed: u64,
    pub cRefreshFrameDisplayed: u64,
    pub cFrameComplete: u64,
    pub qpcFrameComplete: u64,
    pub cFramePending: u64,
    pub qpcFramePending: u64,
    pub cFramesDisplayed: u64,
    pub cFramesComplete: u64,
    pub cFramesPending: u64,
    pub cFramesAvailable: u64,
    pub cFramesDropped: u64,
    pub cFramesMissed: u64,
    pub cRefreshNextDisplayed: u64,
    pub cRefreshNextPresented: u64,
    pub cRefreshesDisplayed: u64,
    pub cRefreshesPresented: u64,
    pub cRefreshStarted: u64,
    pub cPixelsReceived: u64,
    pub cPixelsDrawn: u64,
    pub cBuffersEmpty: u64,
}
import "golang.org/x/sys/windows"

type UNSIGNED_RATIO struct {
	uiNumerator uint32
	uiDenominator uint32
}

type DWM_TIMING_INFO struct {
	cbSize uint32
	rateRefresh UNSIGNED_RATIO
	qpcRefreshPeriod uint64
	rateCompose UNSIGNED_RATIO
	qpcVBlank uint64
	cRefresh uint64
	cDXRefresh uint32
	qpcCompose uint64
	cFrame uint64
	cDXPresent uint32
	cRefreshFrame uint64
	cFrameSubmitted uint64
	cDXPresentSubmitted uint32
	cFrameConfirmed uint64
	cDXPresentConfirmed uint32
	cRefreshConfirmed uint64
	cDXRefreshConfirmed uint32
	cFramesLate uint64
	cFramesOutstanding uint32
	cFrameDisplayed uint64
	qpcFrameDisplayed uint64
	cRefreshFrameDisplayed uint64
	cFrameComplete uint64
	qpcFrameComplete uint64
	cFramePending uint64
	qpcFramePending uint64
	cFramesDisplayed uint64
	cFramesComplete uint64
	cFramesPending uint64
	cFramesAvailable uint64
	cFramesDropped uint64
	cFramesMissed uint64
	cRefreshNextDisplayed uint64
	cRefreshNextPresented uint64
	cRefreshesDisplayed uint64
	cRefreshesPresented uint64
	cRefreshStarted uint64
	cPixelsReceived uint64
	cPixelsDrawn uint64
	cBuffersEmpty uint64
}
type
  UNSIGNED_RATIO = packed record
    uiNumerator: DWORD;
    uiDenominator: DWORD;
  end;

  DWM_TIMING_INFO = packed record
    cbSize: DWORD;
    rateRefresh: UNSIGNED_RATIO;
    qpcRefreshPeriod: UInt64;
    rateCompose: UNSIGNED_RATIO;
    qpcVBlank: UInt64;
    cRefresh: UInt64;
    cDXRefresh: DWORD;
    qpcCompose: UInt64;
    cFrame: UInt64;
    cDXPresent: DWORD;
    cRefreshFrame: UInt64;
    cFrameSubmitted: UInt64;
    cDXPresentSubmitted: DWORD;
    cFrameConfirmed: UInt64;
    cDXPresentConfirmed: DWORD;
    cRefreshConfirmed: UInt64;
    cDXRefreshConfirmed: DWORD;
    cFramesLate: UInt64;
    cFramesOutstanding: DWORD;
    cFrameDisplayed: UInt64;
    qpcFrameDisplayed: UInt64;
    cRefreshFrameDisplayed: UInt64;
    cFrameComplete: UInt64;
    qpcFrameComplete: UInt64;
    cFramePending: UInt64;
    qpcFramePending: UInt64;
    cFramesDisplayed: UInt64;
    cFramesComplete: UInt64;
    cFramesPending: UInt64;
    cFramesAvailable: UInt64;
    cFramesDropped: UInt64;
    cFramesMissed: UInt64;
    cRefreshNextDisplayed: UInt64;
    cRefreshNextPresented: UInt64;
    cRefreshesDisplayed: UInt64;
    cRefreshesPresented: UInt64;
    cRefreshStarted: UInt64;
    cPixelsReceived: UInt64;
    cPixelsDrawn: UInt64;
    cBuffersEmpty: UInt64;
  end;
const UNSIGNED_RATIO = extern struct {
    uiNumerator: u32,
    uiDenominator: u32,
};

const DWM_TIMING_INFO = extern struct {
    cbSize: u32,
    rateRefresh: UNSIGNED_RATIO,
    qpcRefreshPeriod: u64,
    rateCompose: UNSIGNED_RATIO,
    qpcVBlank: u64,
    cRefresh: u64,
    cDXRefresh: u32,
    qpcCompose: u64,
    cFrame: u64,
    cDXPresent: u32,
    cRefreshFrame: u64,
    cFrameSubmitted: u64,
    cDXPresentSubmitted: u32,
    cFrameConfirmed: u64,
    cDXPresentConfirmed: u32,
    cRefreshConfirmed: u64,
    cDXRefreshConfirmed: u32,
    cFramesLate: u64,
    cFramesOutstanding: u32,
    cFrameDisplayed: u64,
    qpcFrameDisplayed: u64,
    cRefreshFrameDisplayed: u64,
    cFrameComplete: u64,
    qpcFrameComplete: u64,
    cFramePending: u64,
    qpcFramePending: u64,
    cFramesDisplayed: u64,
    cFramesComplete: u64,
    cFramesPending: u64,
    cFramesAvailable: u64,
    cFramesDropped: u64,
    cFramesMissed: u64,
    cRefreshNextDisplayed: u64,
    cRefreshNextPresented: u64,
    cRefreshesDisplayed: u64,
    cRefreshesPresented: u64,
    cRefreshStarted: u64,
    cPixelsReceived: u64,
    cPixelsDrawn: u64,
    cBuffersEmpty: u64,
};
type
  UNSIGNED_RATIO {.packed.} = object
    uiNumerator: uint32
    uiDenominator: uint32

  DWM_TIMING_INFO {.packed.} = object
    cbSize: uint32
    rateRefresh: UNSIGNED_RATIO
    qpcRefreshPeriod: uint64
    rateCompose: UNSIGNED_RATIO
    qpcVBlank: uint64
    cRefresh: uint64
    cDXRefresh: uint32
    qpcCompose: uint64
    cFrame: uint64
    cDXPresent: uint32
    cRefreshFrame: uint64
    cFrameSubmitted: uint64
    cDXPresentSubmitted: uint32
    cFrameConfirmed: uint64
    cDXPresentConfirmed: uint32
    cRefreshConfirmed: uint64
    cDXRefreshConfirmed: uint32
    cFramesLate: uint64
    cFramesOutstanding: uint32
    cFrameDisplayed: uint64
    qpcFrameDisplayed: uint64
    cRefreshFrameDisplayed: uint64
    cFrameComplete: uint64
    qpcFrameComplete: uint64
    cFramePending: uint64
    qpcFramePending: uint64
    cFramesDisplayed: uint64
    cFramesComplete: uint64
    cFramesPending: uint64
    cFramesAvailable: uint64
    cFramesDropped: uint64
    cFramesMissed: uint64
    cRefreshNextDisplayed: uint64
    cRefreshNextPresented: uint64
    cRefreshesDisplayed: uint64
    cRefreshesPresented: uint64
    cRefreshStarted: uint64
    cPixelsReceived: uint64
    cPixelsDrawn: uint64
    cBuffersEmpty: uint64
align(1)
struct UNSIGNED_RATIO
{
    uint uiNumerator;
    uint uiDenominator;
}

align(1)
struct DWM_TIMING_INFO
{
    uint cbSize;
    UNSIGNED_RATIO rateRefresh;
    ulong qpcRefreshPeriod;
    UNSIGNED_RATIO rateCompose;
    ulong qpcVBlank;
    ulong cRefresh;
    uint cDXRefresh;
    ulong qpcCompose;
    ulong cFrame;
    uint cDXPresent;
    ulong cRefreshFrame;
    ulong cFrameSubmitted;
    uint cDXPresentSubmitted;
    ulong cFrameConfirmed;
    uint cDXPresentConfirmed;
    ulong cRefreshConfirmed;
    uint cDXRefreshConfirmed;
    ulong cFramesLate;
    uint cFramesOutstanding;
    ulong cFrameDisplayed;
    ulong qpcFrameDisplayed;
    ulong cRefreshFrameDisplayed;
    ulong cFrameComplete;
    ulong qpcFrameComplete;
    ulong cFramePending;
    ulong qpcFramePending;
    ulong cFramesDisplayed;
    ulong cFramesComplete;
    ulong cFramesPending;
    ulong cFramesAvailable;
    ulong cFramesDropped;
    ulong cFramesMissed;
    ulong cRefreshNextDisplayed;
    ulong cRefreshNextPresented;
    ulong cRefreshesDisplayed;
    ulong cRefreshesPresented;
    ulong cRefreshStarted;
    ulong cPixelsReceived;
    ulong cPixelsDrawn;
    ulong cBuffersEmpty;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DWM_TIMING_INFO サイズ: 292 バイト(x64)
dim st, 73    ; 4byte整数×73(構造体サイズ 292 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; rateRefresh : UNSIGNED_RATIO (+4, 8byte)  varptr(st)+4 を基点に操作(8byte:入れ子/配列)
; qpcRefreshPeriod : ULONGLONG (+12, 8byte)  qpoke st,12,値 / qpeek(st,12)  ※IronHSPのみ。3.7/3.8は lpoke st,12,下位 : lpoke st,16,上位
; rateCompose : UNSIGNED_RATIO (+20, 8byte)  varptr(st)+20 を基点に操作(8byte:入れ子/配列)
; qpcVBlank : ULONGLONG (+28, 8byte)  qpoke st,28,値 / qpeek(st,28)  ※IronHSPのみ。3.7/3.8は lpoke st,28,下位 : lpoke st,32,上位
; cRefresh : ULONGLONG (+36, 8byte)  qpoke st,36,値 / qpeek(st,36)  ※IronHSPのみ。3.7/3.8は lpoke st,36,下位 : lpoke st,40,上位
; cDXRefresh : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; qpcCompose : ULONGLONG (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; cFrame : ULONGLONG (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; cDXPresent : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; cRefreshFrame : ULONGLONG (+68, 8byte)  qpoke st,68,値 / qpeek(st,68)  ※IronHSPのみ。3.7/3.8は lpoke st,68,下位 : lpoke st,72,上位
; cFrameSubmitted : ULONGLONG (+76, 8byte)  qpoke st,76,値 / qpeek(st,76)  ※IronHSPのみ。3.7/3.8は lpoke st,76,下位 : lpoke st,80,上位
; cDXPresentSubmitted : DWORD (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; cFrameConfirmed : ULONGLONG (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; cDXPresentConfirmed : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; cRefreshConfirmed : ULONGLONG (+100, 8byte)  qpoke st,100,値 / qpeek(st,100)  ※IronHSPのみ。3.7/3.8は lpoke st,100,下位 : lpoke st,104,上位
; cDXRefreshConfirmed : DWORD (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; cFramesLate : ULONGLONG (+112, 8byte)  qpoke st,112,値 / qpeek(st,112)  ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; cFramesOutstanding : DWORD (+120, 4byte)  st.30 = 値  /  値 = st.30   (lpoke/lpeek も可)
; cFrameDisplayed : ULONGLONG (+124, 8byte)  qpoke st,124,値 / qpeek(st,124)  ※IronHSPのみ。3.7/3.8は lpoke st,124,下位 : lpoke st,128,上位
; qpcFrameDisplayed : ULONGLONG (+132, 8byte)  qpoke st,132,値 / qpeek(st,132)  ※IronHSPのみ。3.7/3.8は lpoke st,132,下位 : lpoke st,136,上位
; cRefreshFrameDisplayed : ULONGLONG (+140, 8byte)  qpoke st,140,値 / qpeek(st,140)  ※IronHSPのみ。3.7/3.8は lpoke st,140,下位 : lpoke st,144,上位
; cFrameComplete : ULONGLONG (+148, 8byte)  qpoke st,148,値 / qpeek(st,148)  ※IronHSPのみ。3.7/3.8は lpoke st,148,下位 : lpoke st,152,上位
; qpcFrameComplete : ULONGLONG (+156, 8byte)  qpoke st,156,値 / qpeek(st,156)  ※IronHSPのみ。3.7/3.8は lpoke st,156,下位 : lpoke st,160,上位
; cFramePending : ULONGLONG (+164, 8byte)  qpoke st,164,値 / qpeek(st,164)  ※IronHSPのみ。3.7/3.8は lpoke st,164,下位 : lpoke st,168,上位
; qpcFramePending : ULONGLONG (+172, 8byte)  qpoke st,172,値 / qpeek(st,172)  ※IronHSPのみ。3.7/3.8は lpoke st,172,下位 : lpoke st,176,上位
; cFramesDisplayed : ULONGLONG (+180, 8byte)  qpoke st,180,値 / qpeek(st,180)  ※IronHSPのみ。3.7/3.8は lpoke st,180,下位 : lpoke st,184,上位
; cFramesComplete : ULONGLONG (+188, 8byte)  qpoke st,188,値 / qpeek(st,188)  ※IronHSPのみ。3.7/3.8は lpoke st,188,下位 : lpoke st,192,上位
; cFramesPending : ULONGLONG (+196, 8byte)  qpoke st,196,値 / qpeek(st,196)  ※IronHSPのみ。3.7/3.8は lpoke st,196,下位 : lpoke st,200,上位
; cFramesAvailable : ULONGLONG (+204, 8byte)  qpoke st,204,値 / qpeek(st,204)  ※IronHSPのみ。3.7/3.8は lpoke st,204,下位 : lpoke st,208,上位
; cFramesDropped : ULONGLONG (+212, 8byte)  qpoke st,212,値 / qpeek(st,212)  ※IronHSPのみ。3.7/3.8は lpoke st,212,下位 : lpoke st,216,上位
; cFramesMissed : ULONGLONG (+220, 8byte)  qpoke st,220,値 / qpeek(st,220)  ※IronHSPのみ。3.7/3.8は lpoke st,220,下位 : lpoke st,224,上位
; cRefreshNextDisplayed : ULONGLONG (+228, 8byte)  qpoke st,228,値 / qpeek(st,228)  ※IronHSPのみ。3.7/3.8は lpoke st,228,下位 : lpoke st,232,上位
; cRefreshNextPresented : ULONGLONG (+236, 8byte)  qpoke st,236,値 / qpeek(st,236)  ※IronHSPのみ。3.7/3.8は lpoke st,236,下位 : lpoke st,240,上位
; cRefreshesDisplayed : ULONGLONG (+244, 8byte)  qpoke st,244,値 / qpeek(st,244)  ※IronHSPのみ。3.7/3.8は lpoke st,244,下位 : lpoke st,248,上位
; cRefreshesPresented : ULONGLONG (+252, 8byte)  qpoke st,252,値 / qpeek(st,252)  ※IronHSPのみ。3.7/3.8は lpoke st,252,下位 : lpoke st,256,上位
; cRefreshStarted : ULONGLONG (+260, 8byte)  qpoke st,260,値 / qpeek(st,260)  ※IronHSPのみ。3.7/3.8は lpoke st,260,下位 : lpoke st,264,上位
; cPixelsReceived : ULONGLONG (+268, 8byte)  qpoke st,268,値 / qpeek(st,268)  ※IronHSPのみ。3.7/3.8は lpoke st,268,下位 : lpoke st,272,上位
; cPixelsDrawn : ULONGLONG (+276, 8byte)  qpoke st,276,値 / qpeek(st,276)  ※IronHSPのみ。3.7/3.8は lpoke st,276,下位 : lpoke st,280,上位
; cBuffersEmpty : ULONGLONG (+284, 8byte)  qpoke st,284,値 / qpeek(st,284)  ※IronHSPのみ。3.7/3.8は lpoke st,284,下位 : lpoke st,288,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global UNSIGNED_RATIO, pack=1
    #field int uiNumerator
    #field int uiDenominator
#endstruct

#defstruct global DWM_TIMING_INFO, pack=1
    #field int cbSize
    #field UNSIGNED_RATIO rateRefresh
    #field int64 qpcRefreshPeriod
    #field UNSIGNED_RATIO rateCompose
    #field int64 qpcVBlank
    #field int64 cRefresh
    #field int cDXRefresh
    #field int64 qpcCompose
    #field int64 cFrame
    #field int cDXPresent
    #field int64 cRefreshFrame
    #field int64 cFrameSubmitted
    #field int cDXPresentSubmitted
    #field int64 cFrameConfirmed
    #field int cDXPresentConfirmed
    #field int64 cRefreshConfirmed
    #field int cDXRefreshConfirmed
    #field int64 cFramesLate
    #field int cFramesOutstanding
    #field int64 cFrameDisplayed
    #field int64 qpcFrameDisplayed
    #field int64 cRefreshFrameDisplayed
    #field int64 cFrameComplete
    #field int64 qpcFrameComplete
    #field int64 cFramePending
    #field int64 qpcFramePending
    #field int64 cFramesDisplayed
    #field int64 cFramesComplete
    #field int64 cFramesPending
    #field int64 cFramesAvailable
    #field int64 cFramesDropped
    #field int64 cFramesMissed
    #field int64 cRefreshNextDisplayed
    #field int64 cRefreshNextPresented
    #field int64 cRefreshesDisplayed
    #field int64 cRefreshesPresented
    #field int64 cRefreshStarted
    #field int64 cPixelsReceived
    #field int64 cPixelsDrawn
    #field int64 cBuffersEmpty
#endstruct

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