ホーム › Graphics.Dwm › DWM_TIMING_INFO
DWM_TIMING_INFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| cbSize | DWORD | 4 | +0 | +0 | この構造体のサイズ(バイト数)。呼び出し前に設定する。 |
| rateRefresh | UNSIGNED_RATIO | 8 | +4 | +4 | モニターのリフレッシュレートを分数で表す値。 |
| qpcRefreshPeriod | ULONGLONG | 8 | +12 | +12 | リフレッシュ周期をQPCカウント単位で表す値。 |
| rateCompose | UNSIGNED_RATIO | 8 | +20 | +20 | DWMの合成レートを分数で表す値。 |
| qpcVBlank | ULONGLONG | 8 | +28 | +28 | 直近の垂直帰線(VBlank)時刻をQPCカウントで表す値。 |
| cRefresh | ULONGLONG | 8 | +36 | +36 | システム開始以降のリフレッシュ累積回数。 |
| cDXRefresh | DWORD | 4 | +44 | +44 | DirectXのリフレッシュ累積カウント。 |
| qpcCompose | ULONGLONG | 8 | +48 | +48 | 直近のフレーム合成時刻をQPCカウントで表す値。 |
| cFrame | ULONGLONG | 8 | +56 | +56 | 合成されたフレームの累積数。 |
| cDXPresent | DWORD | 4 | +64 | +64 | DirectXのPresent呼び出し累積回数。 |
| cRefreshFrame | ULONGLONG | 8 | +68 | +68 | 現フレームが合成されたときのリフレッシュカウント。 |
| cFrameSubmitted | ULONGLONG | 8 | +76 | +76 | DWMに送信されたフレームの累積数。 |
| cDXPresentSubmitted | DWORD | 4 | +84 | +84 | 送信されたDirectX Presentの累積カウント。 |
| cFrameConfirmed | ULONGLONG | 8 | +88 | +88 | 画面に確実に表示されたフレームの累積数。 |
| cDXPresentConfirmed | DWORD | 4 | +96 | +96 | 確認されたDirectX Presentの累積カウント。 |
| cRefreshConfirmed | ULONGLONG | 8 | +100 | +100 | フレーム確認時のリフレッシュ累積カウント。 |
| cDXRefreshConfirmed | DWORD | 4 | +108 | +108 | 確認されたDirectXリフレッシュの累積カウント。 |
| cFramesLate | ULONGLONG | 8 | +112 | +112 | 予定より遅延して表示されたフレーム数。 |
| cFramesOutstanding | DWORD | 4 | +120 | +120 | まだ表示されていない未処理フレーム数。 |
| cFrameDisplayed | ULONGLONG | 8 | +124 | +124 | 最後に表示されたフレームの番号。 |
| qpcFrameDisplayed | ULONGLONG | 8 | +132 | +132 | 最後にフレームが表示された時刻をQPCカウントで表す値。 |
| cRefreshFrameDisplayed | ULONGLONG | 8 | +140 | +140 | フレーム表示時のリフレッシュカウント。 |
| cFrameComplete | ULONGLONG | 8 | +148 | +148 | 完了した最後のフレーム番号。 |
| qpcFrameComplete | ULONGLONG | 8 | +156 | +156 | フレームが完了した時刻をQPCカウントで表す値。 |
| cFramePending | ULONGLONG | 8 | +164 | +164 | 保留中の最後のフレーム番号。 |
| qpcFramePending | ULONGLONG | 8 | +172 | +172 | フレームが保留になった時刻をQPCカウントで表す値。 |
| cFramesDisplayed | ULONGLONG | 8 | +180 | +180 | 表示されたフレームの累積数。 |
| cFramesComplete | ULONGLONG | 8 | +188 | +188 | 完了したフレームの累積数。 |
| cFramesPending | ULONGLONG | 8 | +196 | +196 | 保留中フレームの累積数。 |
| cFramesAvailable | ULONGLONG | 8 | +204 | +204 | 利用可能なフレームの累積数。 |
| cFramesDropped | ULONGLONG | 8 | +212 | +212 | 破棄(ドロップ)されたフレームの累積数。 |
| cFramesMissed | ULONGLONG | 8 | +220 | +220 | 表示機会を逃したフレームの累積数。 |
| cRefreshNextDisplayed | ULONGLONG | 8 | +228 | +228 | 次に表示予定のフレームのリフレッシュカウント。 |
| cRefreshNextPresented | ULONGLONG | 8 | +236 | +236 | 次にPresent予定のフレームのリフレッシュカウント。 |
| cRefreshesDisplayed | ULONGLONG | 8 | +244 | +244 | 表示されたフレームが占めたリフレッシュ累積数。 |
| cRefreshesPresented | ULONGLONG | 8 | +252 | +252 | Presentされたフレームが占めたリフレッシュ累積数。 |
| cRefreshStarted | ULONGLONG | 8 | +260 | +260 | 合成が開始されたリフレッシュ累積カウント。 |
| cPixelsReceived | ULONGLONG | 8 | +268 | +268 | DWMが受け取ったピクセルの累積数。 |
| cPixelsDrawn | ULONGLONG | 8 | +276 | +276 | DWMが描画したピクセルの累積数。 |
| cBuffersEmpty | ULONGLONG | 8 | +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 Structureimport 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: uint64align(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