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この DWM_TIMING_INFO 構造体のサイズです。
rateRefreshUNSIGNED_RATIO8+4+4モニターのリフレッシュ レートです。
qpcRefreshPeriodULONGLONG8+12+12モニターのリフレッシュ周期です。
rateComposeUNSIGNED_RATIO8+20+20コンポジション レートです。
qpcVBlankULONGLONG8+28+28垂直ブランク前のクエリ パフォーマンス カウンターの値です。
cRefreshULONGLONG8+36+36DWM のリフレッシュ カウンターです。
cDXRefreshDWORD4+44+44DirectX のリフレッシュ カウンターです。
qpcComposeULONGLONG8+48+48フレームのコンポジション時のクエリ パフォーマンス カウンターの値です。
cFrameULONGLONG8+56+56qpcCompose でコンポジションされたフレーム番号です。
cDXPresentDWORD4+64+64レンダリング フレームの識別に使用される DirectX の present 番号です。
cRefreshFrameULONGLONG8+68+68qpcCompose でコンポジションされたフレームのリフレッシュ カウントです。
cFrameSubmittedULONGLONG8+76+76最後に送信された DWM のフレーム番号です。
cDXPresentSubmittedDWORD4+84+84最後に送信された DirectX の present 番号です。
cFrameConfirmedULONGLONG8+88+88表示済みとして最後に確認された DWM のフレーム番号です。
cDXPresentConfirmedDWORD4+96+96表示済みとして最後に確認された DirectX の present 番号です。
cRefreshConfirmedULONGLONG8+100+100GPU によって完了が確認された最後のフレームの目標リフレッシュ カウントです。
cDXRefreshConfirmedDWORD4+108+108フレームが表示済みとして確認されたときの DirectX のリフレッシュ カウントです。
cFramesLateULONGLONG8+112+112DWM が遅れて表示したフレームの数です。
cFramesOutstandingDWORD4+120+120発行されたものの、完了が確認されていないコンポジション フレームの数です。
cFrameDisplayedULONGLONG8+124+124最後に表示されたフレームです。
qpcFrameDisplayedULONGLONG8+132+132フレームが表示されたコンポジション パスの QPC 時刻です。
cRefreshFrameDisplayedULONGLONG8+140+140フレームが表示されるはずだった時点の垂直リフレッシュ カウントです。
cFrameCompleteULONGLONG8+148+148完了としてマークされた最後のフレームの ID です。
qpcFrameCompleteULONGLONG8+156+156最後のフレームが完了としてマークされた QPC 時刻です。
cFramePendingULONGLONG8+164+164保留中としてマークされた最後のフレームの ID です。
qpcFramePendingULONGLONG8+172+172最後のフレームが保留中としてマークされた QPC 時刻です。
cFramesDisplayedULONGLONG8+180+180表示された一意のフレームの数です。この値は DwmGetCompositionTimingInfo 関数を 2 回目に呼び出した後にのみ有効です。
cFramesCompleteULONGLONG8+188+188受信した新しい完了済みフレームの数です。
cFramesPendingULONGLONG8+196+196DirectX に送信されたものの、まだ完了していない新しいフレームの数です。
cFramesAvailableULONGLONG8+204+204利用可能でありながら、表示、使用、または破棄されていないフレームの数です。この値は DwmGetCompositionTimingInfo を 2 回目に呼び出した後にのみ有効です。
cFramesDroppedULONGLONG8+212+212コンポジションが遅すぎたために一度も表示されなかった、レンダリング済みフレームの数です。この値は DwmGetCompositionTimingInfo を 2 回目に呼び出した後にのみ有効です。
cFramesMissedULONGLONG8+220+220新しいフレームを使用すべきであったにもかかわらず利用できず、古いフレームがコンポジションされた回数です。
cRefreshNextDisplayedULONGLONG8+228+228次のフレームが表示される予定のフレーム カウントです。
cRefreshNextPresentedULONGLONG8+236+236次の DirectX の present が表示される予定のフレーム カウントです。
cRefreshesDisplayedULONGLONG8+244+244DwmSetPresentParameters 関数が最後に呼び出されてから、アプリケーションに対して表示されたリフレッシュの総数です。
cRefreshesPresentedULONGLONG8+252+252DwmSetPresentParameters が最後に呼び出されてから、アプリケーションが present したリフレッシュの総数です。
cRefreshStartedULONGLONG8+260+260このウィンドウのコンテンツの表示が開始されたときのリフレッシュ番号です。
cPixelsReceivedULONGLONG8+268+268DirectX が DWM にリダイレクトしたピクセルの総数です。
cPixelsDrawnULONGLONG8+276+276描画されたピクセルの数です。
cBuffersEmptyULONGLONG8+284+284フリップ チェーン内の空のバッファーの数です。

公式ドキュメント

デスクトップ ウィンドウ マネージャー (DWM) のコンポジション タイミング情報を指定します。DwmGetCompositionTimingInfo 関数で使用されます。

解説(Remarks)

DWM_FRAME_COUNT と QPC_TIME は、どちらも Dwmapi.h で ULONGLONG として定義されています。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#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