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

STARTUPINFOW

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

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

フィールド

フィールドサイズx64x86説明
cbDWORD4+0+0構造体のサイズ (バイト単位)。
lpReservedLPWSTR8/4+8+4予約済みです。NULL でなければなりません。
lpDesktopLPWSTR8/4+16+8

このプロセスのデスクトップ名、またはデスクトップ名とウィンドウステーション名の両方です。文字列中のバックスラッシュは、その文字列にデスクトップ名とウィンドウステーション名の両方が含まれていることを示します。

詳細については、「Thread Connection to a Desktop」を参照してください。

lpTitleLPWSTR8/4+24+12コンソールプロセスの場合、新しいコンソールウィンドウが作成されるときにタイトルバーに表示されるタイトルです。NULL の場合は、代わりに実行可能ファイルの名前がウィンドウのタイトルとして使用されます。GUI プロセス、または新しいコンソールウィンドウを作成しないコンソールプロセスでは、このパラメーターは NULL でなければなりません。
dwXDWORD4+32+16

dwFlagsSTARTF_USEPOSITION が指定されている場合、このメンバーは、新しいウィンドウが作成されるときのウィンドウ左上隅の x オフセット (ピクセル単位) です。それ以外の場合、このメンバーは無視されます。

オフセットは画面の左上隅からの値です。GUI プロセスの場合、CreateWindowx パラメーターが CW_USEDEFAULT のときに、新しいプロセスが最初に CreateWindow を呼び出してオーバーラップウィンドウを作成する際に、指定された位置が使用されます。

dwYDWORD4+36+20

dwFlagsSTARTF_USEPOSITION が指定されている場合、このメンバーは、新しいウィンドウが作成されるときのウィンドウ左上隅の y オフセット (ピクセル単位) です。それ以外の場合、このメンバーは無視されます。

オフセットは画面の左上隅からの値です。GUI プロセスの場合、CreateWindowy パラメーターが CW_USEDEFAULT のときに、新しいプロセスが最初に CreateWindow を呼び出してオーバーラップウィンドウを作成する際に、指定された位置が使用されます。

dwXSizeDWORD4+40+24

dwFlagsSTARTF_USESIZE が指定されている場合、このメンバーは、新しいウィンドウが作成されるときのウィンドウの幅 (ピクセル単位) です。それ以外の場合、このメンバーは無視されます。

GUI プロセスの場合、これは CreateWindownWidth パラメーターが CW_USEDEFAULT のときに、新しいプロセスが最初に CreateWindow を呼び出してオーバーラップウィンドウを作成する場合にのみ使用されます。

dwYSizeDWORD4+44+28

dwFlagsSTARTF_USESIZE が指定されている場合、このメンバーは、新しいウィンドウが作成されるときのウィンドウの高さ (ピクセル単位) です。それ以外の場合、このメンバーは無視されます。

GUI プロセスの場合、これは CreateWindownHeight パラメーターが CW_USEDEFAULT のときに、新しいプロセスが最初に CreateWindow を呼び出してオーバーラップウィンドウを作成する場合にのみ使用されます。

dwXCountCharsDWORD4+48+32dwFlagsSTARTF_USECOUNTCHARS が指定されている場合、コンソールプロセスで新しいコンソールウィンドウが作成されるときに、このメンバーはスクリーンバッファーの幅を文字の桁数で指定します。それ以外の場合、このメンバーは無視されます。
dwYCountCharsDWORD4+52+36dwFlagsSTARTF_USECOUNTCHARS が指定されている場合、コンソールプロセスで新しいコンソールウィンドウが作成されるときに、このメンバーはスクリーンバッファーの高さを文字の行数で指定します。それ以外の場合、このメンバーは無視されます。
dwFillAttributeDWORD4+56+40

dwFlagsSTARTF_USEFILLATTRIBUTE が指定されている場合、このメンバーは、コンソールアプリケーションで新しいコンソールウィンドウが作成されるときの初期のテキスト色と背景色です。それ以外の場合、このメンバーは無視されます。

この値には、次の値の任意の組み合わせを指定できます。FOREGROUND_BLUEFOREGROUND_GREENFOREGROUND_REDFOREGROUND_INTENSITYBACKGROUND_BLUEBACKGROUND_GREENBACKGROUND_REDBACKGROUND_INTENSITY。たとえば、次の値の組み合わせは白い背景に赤いテキストを表示します。

FOREGROUND_RED| BACKGROUND_RED| BACKGROUND_GREEN| BACKGROUND_BLUE

dwFlagsSTARTUPINFOW_FLAGS4+60+44

プロセスがウィンドウを作成する際に、特定の STARTUPINFO メンバーを使用するかどうかを決定するビットフィールドです。このメンバーには、次の値の 1 つ以上を指定できます。

意味
STARTF_FORCEONFEEDBACK
0x00000040
CreateProcess が呼び出された後、 2 秒間カーソルがフィードバックモードになることを示します。「バックグラウンドで作業中」カーソルが表示されます (マウスのコントロールパネルの「ポインター」タブを参照してください)。

その 2 秒の間にプロセスが最初の GUI 呼び出しを行った場合、システムはそのプロセスにさらに 5 秒を与えます。その 5 秒の間にプロセスがウィンドウを表示した場合、システムはウィンドウの描画を完了できるように、さらに 5 秒をプロセスに与えます。

プロセスが描画中かどうかにかかわらず、 GetMessage が最初に呼び出された後、システムはフィードバックカーソルをオフにします。

STARTF_FORCEOFFFEEDBACK
0x00000080
プロセスの起動中、フィードバックカーソルが強制的にオフになることを示します。「通常の選択」カーソルが表示されます。
STARTF_PREVENTPINNING
0x00002000
プロセスによって作成されたウィンドウをタスクバーにピン留めできないことを示します。

このフラグは STARTF_TITLEISAPPID と組み合わせて使用しなければなりません。

STARTF_RUNFULLSCREEN
0x00000020
プロセスをウィンドウモードではなく全画面モードで実行することを示します。

このフラグは、x86 コンピューター上で実行されるコンソールアプリケーションでのみ有効です。

STARTF_TITLEISAPPID
0x00001000
lpTitle メンバーに AppUserModelID が格納されています。この識別子は、タスクバーと スタート メニューでのアプリケーションの表示方法を制御し、正しいショートカットやジャンプリストと関連付けられるようにします。通常、アプリケーションはこのフラグを設定する代わりに SetCurrentProcessExplicitAppUserModelID 関数と GetCurrentProcessExplicitAppUserModelID 関数を使用します。詳細については、「Application User Model IDs」を参照してください。

STARTF_PREVENTPINNING が使用されている場合、アプリケーションのウィンドウはタスクバーにピン留めできません。アプリケーションが AppUserModelID 関連のウィンドウプロパティを使用すると、そのウィンドウについてのみこの設定が上書きされます。

このフラグは STARTF_TITLEISLINKNAME と併用できません。

STARTF_TITLEISLINKNAME
0x00000800
lpTitle メンバーに、ユーザーがこのプロセスを開始するために実行したショートカットファイル (.lnk) のパスが格納されています。これは通常、起動されるアプリケーションを指す .lnk ファイルが実行されたときにシェルによって設定されます。 ほとんどのアプリケーションでは、この値を設定する必要はありません。

このフラグは STARTF_TITLEISAPPID と併用できません。

STARTF_UNTRUSTEDSOURCE
0x00008000
コマンドラインが信頼できないソースから渡されたことを示します。詳細については、「解説」を参照してください。
STARTF_USECOUNTCHARS
0x00000008
dwXCountChars メンバーと dwYCountChars メンバーに追加情報が格納されています。
STARTF_USEFILLATTRIBUTE
0x00000010
dwFillAttribute メンバーに追加情報が格納されています。
STARTF_USEHOTKEY
0x00000200
hStdInput メンバーに追加情報が格納されています。

このフラグは STARTF_USESTDHANDLES と併用できません。

STARTF_USEPOSITION
0x00000004
dwX メンバーと dwY メンバーに追加情報が格納されています。
STARTF_USESHOWWINDOW
0x00000001
wShowWindow メンバーに追加情報が格納されています。
STARTF_USESIZE
0x00000002
dwXSize メンバーと dwYSize メンバーに追加情報が格納されています。
STARTF_USESTDHANDLES
0x00000100
hStdInputhStdOutputhStdError の各メンバーに追加情報が格納されています。

プロセス作成関数のいずれかを呼び出すときにこのフラグを指定する場合、ハンドルは継承可能でなければならず、 関数の bInheritHandles パラメーターは TRUE に設定しなければなりません。詳細については、 Handle Inheritance を参照してください。

GetStartupInfo 関数を呼び出すときにこのフラグが指定されている場合、これらのメンバーは、プロセスの作成時に指定されたハンドル値または INVALID_HANDLE_VALUE のいずれかになります。

ハンドルが不要になったら、 CloseHandle で閉じなければなりません。

このフラグは STARTF_USEHOTKEY と併用できません。

wShowWindowWORD2+64+48

dwFlagsSTARTF_USESHOWWINDOW が指定されている場合、このメンバーには、ShowWindow 関数の nCmdShow パラメーターに指定できる値のうち、SW_SHOWDEFAULT を除く任意の値を指定できます。それ以外の場合、このメンバーは無視されます。

GUI プロセスの場合、 ShowWindow が最初に呼び出されるときは、その nCmdShow パラメーターは無視され、wShowWindow が既定値を指定します。それ以降の ShowWindow の呼び出しでは、ShowWindownCmdShow パラメーターが SW_SHOWDEFAULT に設定されている場合に wShowWindow メンバーが使用されます。

cbReserved2WORD2+66+50C ランタイムが使用するために予約済みです。0 でなければなりません。
lpReserved2BYTE*8/4+72+52C ランタイムが使用するために予約済みです。NULL でなければなりません。
hStdInputHANDLE8/4+80+56

dwFlagsSTARTF_USESTDHANDLES が指定されている場合、このメンバーはプロセスの標準入力ハンドルです。STARTF_USESTDHANDLES が指定されていない場合、標準入力の既定値はキーボードバッファーです。

dwFlagsSTARTF_USEHOTKEY が指定されている場合、このメンバーは、プロセスを所有するアプリケーションが作成した最初の対象となるトップレベルウィンドウに WM_SETHOTKEY メッセージの wParam パラメーターとして送信されるホットキー値を指定します。ウィンドウが WS_POPUP ウィンドウスタイルで作成されている場合、WS_EX_APPWINDOW 拡張ウィンドウスタイルも設定されていない限り、そのウィンドウは対象になりません。詳細については、CreateWindowEx を参照してください。

それ以外の場合、このメンバーは無視されます。

hStdOutputHANDLE8/4+88+60

dwFlagsSTARTF_USESTDHANDLES が指定されている場合、このメンバーはプロセスの標準出力ハンドルです。それ以外の場合、このメンバーは無視され、標準出力の既定値はコンソールウィンドウのバッファーになります。

プロセスがタスクバーまたはジャンプリストから起動された場合、システムは hStdOutput に、そのプロセスの起動に使用されたタスクバーまたはジャンプリストを含むモニターへのハンドルを設定します。詳細については、「解説」を参照してください。Windows 7、Windows Server 2008 R2、Windows Vista、Windows Server 2008、Windows XP および Windows Server 2003:  この動作は Windows 8 および Windows Server 2012 で導入されました。

hStdErrorHANDLE8/4+96+64dwFlagsSTARTF_USESTDHANDLES が指定されている場合、このメンバーはプロセスの標準エラーハンドルです。それ以外の場合、このメンバーは無視され、標準エラーの既定値はコンソールウィンドウのバッファーになります。

公式ドキュメント

プロセスの作成時に、ウィンドウステーション、デスクトップ、標準ハンドル、およびメインウィンドウの外観を指定します。

解説(Remarks)

グラフィカルユーザーインターフェイス (GUI) プロセスの場合、この情報は、 CreateWindow 関数によって作成され、 ShowWindow 関数によって表示される最初のウィンドウに影響します。コンソールプロセスの場合、この情報は、そのプロセスに対して新しいコンソールが作成されるときのコンソールウィンドウに影響します。プロセスは GetStartupInfo 関数を使用して、プロセスの作成時に指定された STARTUPINFO 構造体を取得できます。

GUI プロセスが開始されるときに STARTF_FORCEONFEEDBACKSTARTF_FORCEOFFFEEDBACK のどちらも指定されていない場合は、プロセスフィードバックカーソルが使用されます。GUI プロセスとは、サブシステムが "windows" として指定されているプロセスです。

プロセスがタスクバーまたはジャンプリストから起動された場合は、GetStartupInfo を使用して STARTUPINFO 構造体を取得し、hStdOutput が設定されているかどうかを確認します。設定されている場合は、GetMonitorInfo を使用して、hStdOutput が有効なモニターハンドル (HMONITOR) かどうかを確認します。プロセスは、そのハンドルを使用して自身のウィンドウの位置を決定できます。

STARTF_UNTRUSTEDSOURCE フラグが指定されている場合、アプリケーションはコマンドラインが信頼できないものであることを認識する必要があります。このフラグが設定されている場合、アプリケーションはマクロ、ダウンロードされたコンテンツ、自動印刷など、危険となる可能性のある機能を無効にしてください。このフラグは省略可能です。CreateProcess を呼び出すアプリケーションでは、信頼できないコマンドライン引数 (Web コンテンツから提供されたものなど) を指定してプログラムを起動する際に、新しく作成されたプロセスが適切なポリシーを適用できるように、このフラグを設定することが推奨されます。

STARTF_UNTRUSTEDSOURCE フラグは Windows Vista 以降でサポートされていますが、Windows 10 SDK より前の SDK ヘッダーファイルでは定義されていません。Windows 10 より前のバージョンでこのフラグを使用するには、プログラム内で手動で定義できます。

次のコード例は、StartUpInfoW の使用方法を示しています。

#include <windows.h>
#include <stdio.h>
#include <tchar.h>

void _tmain( int argc, TCHAR *argv[] )
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    if( argc != 2 )
    {
        printf("Usage: %s [cmdline]\n", argv[0]);
        return;
    }

    // Start the child process. 
    if( !CreateProcess( NULL,   // No module name (use command line)
        argv[1],        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi )           // Pointer to PROCESS_INFORMATION structure
    ) 
    {
        printf( "CreateProcess failed (%d).\n", GetLastError() );
        return;
    }

    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );

    // Close process and thread handles. 
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
}

この例の詳細については、 Creating Processes を参照してください。

メモ

processthreadsapi.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいてこの関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして STARTUPINFO を定義します。エンコーディング中立のエイリアスと、エンコーディング中立でないコードを混在させて使用すると、不一致が生じ、コンパイルエラーや実行時エラーの原因となることがあります。詳細については、「Conventions for Function Prototypes」を参照してください。

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

各言語での定義

#include <windows.h>

// STARTUPINFOW  (x64 104 / x86 68 バイト)
typedef struct STARTUPINFOW {
    DWORD cb;
    LPWSTR lpReserved;
    LPWSTR lpDesktop;
    LPWSTR lpTitle;
    DWORD dwX;
    DWORD dwY;
    DWORD dwXSize;
    DWORD dwYSize;
    DWORD dwXCountChars;
    DWORD dwYCountChars;
    DWORD dwFillAttribute;
    STARTUPINFOW_FLAGS dwFlags;
    WORD wShowWindow;
    WORD cbReserved2;
    BYTE* lpReserved2;
    HANDLE hStdInput;
    HANDLE hStdOutput;
    HANDLE hStdError;
} STARTUPINFOW;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct STARTUPINFOW
{
    public uint cb;
    public IntPtr lpReserved;
    public IntPtr lpDesktop;
    public IntPtr lpTitle;
    public uint dwX;
    public uint dwY;
    public uint dwXSize;
    public uint dwYSize;
    public uint dwXCountChars;
    public uint dwYCountChars;
    public uint dwFillAttribute;
    public uint dwFlags;
    public ushort wShowWindow;
    public ushort cbReserved2;
    public IntPtr lpReserved2;
    public IntPtr hStdInput;
    public IntPtr hStdOutput;
    public IntPtr hStdError;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure STARTUPINFOW
    Public cb As UInteger
    Public lpReserved As IntPtr
    Public lpDesktop As IntPtr
    Public lpTitle As IntPtr
    Public dwX As UInteger
    Public dwY As UInteger
    Public dwXSize As UInteger
    Public dwYSize As UInteger
    Public dwXCountChars As UInteger
    Public dwYCountChars As UInteger
    Public dwFillAttribute As UInteger
    Public dwFlags As UInteger
    Public wShowWindow As UShort
    Public cbReserved2 As UShort
    Public lpReserved2 As IntPtr
    Public hStdInput As IntPtr
    Public hStdOutput As IntPtr
    Public hStdError As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class STARTUPINFOW(ctypes.Structure):
    _fields_ = [
        ("cb", wintypes.DWORD),
        ("lpReserved", ctypes.c_void_p),
        ("lpDesktop", ctypes.c_void_p),
        ("lpTitle", ctypes.c_void_p),
        ("dwX", wintypes.DWORD),
        ("dwY", wintypes.DWORD),
        ("dwXSize", wintypes.DWORD),
        ("dwYSize", wintypes.DWORD),
        ("dwXCountChars", wintypes.DWORD),
        ("dwYCountChars", wintypes.DWORD),
        ("dwFillAttribute", wintypes.DWORD),
        ("dwFlags", wintypes.DWORD),
        ("wShowWindow", ctypes.c_ushort),
        ("cbReserved2", ctypes.c_ushort),
        ("lpReserved2", ctypes.c_void_p),
        ("hStdInput", ctypes.c_void_p),
        ("hStdOutput", ctypes.c_void_p),
        ("hStdError", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct STARTUPINFOW {
    pub cb: u32,
    pub lpReserved: *mut core::ffi::c_void,
    pub lpDesktop: *mut core::ffi::c_void,
    pub lpTitle: *mut core::ffi::c_void,
    pub dwX: u32,
    pub dwY: u32,
    pub dwXSize: u32,
    pub dwYSize: u32,
    pub dwXCountChars: u32,
    pub dwYCountChars: u32,
    pub dwFillAttribute: u32,
    pub dwFlags: u32,
    pub wShowWindow: u16,
    pub cbReserved2: u16,
    pub lpReserved2: *mut core::ffi::c_void,
    pub hStdInput: *mut core::ffi::c_void,
    pub hStdOutput: *mut core::ffi::c_void,
    pub hStdError: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type STARTUPINFOW struct {
	cb uint32
	lpReserved uintptr
	lpDesktop uintptr
	lpTitle uintptr
	dwX uint32
	dwY uint32
	dwXSize uint32
	dwYSize uint32
	dwXCountChars uint32
	dwYCountChars uint32
	dwFillAttribute uint32
	dwFlags uint32
	wShowWindow uint16
	cbReserved2 uint16
	lpReserved2 uintptr
	hStdInput uintptr
	hStdOutput uintptr
	hStdError uintptr
}
type
  STARTUPINFOW = record
    cb: DWORD;
    lpReserved: Pointer;
    lpDesktop: Pointer;
    lpTitle: Pointer;
    dwX: DWORD;
    dwY: DWORD;
    dwXSize: DWORD;
    dwYSize: DWORD;
    dwXCountChars: DWORD;
    dwYCountChars: DWORD;
    dwFillAttribute: DWORD;
    dwFlags: DWORD;
    wShowWindow: Word;
    cbReserved2: Word;
    lpReserved2: Pointer;
    hStdInput: Pointer;
    hStdOutput: Pointer;
    hStdError: Pointer;
  end;
const STARTUPINFOW = extern struct {
    cb: u32,
    lpReserved: ?*anyopaque,
    lpDesktop: ?*anyopaque,
    lpTitle: ?*anyopaque,
    dwX: u32,
    dwY: u32,
    dwXSize: u32,
    dwYSize: u32,
    dwXCountChars: u32,
    dwYCountChars: u32,
    dwFillAttribute: u32,
    dwFlags: u32,
    wShowWindow: u16,
    cbReserved2: u16,
    lpReserved2: ?*anyopaque,
    hStdInput: ?*anyopaque,
    hStdOutput: ?*anyopaque,
    hStdError: ?*anyopaque,
};
type
  STARTUPINFOW {.bycopy.} = object
    cb: uint32
    lpReserved: pointer
    lpDesktop: pointer
    lpTitle: pointer
    dwX: uint32
    dwY: uint32
    dwXSize: uint32
    dwYSize: uint32
    dwXCountChars: uint32
    dwYCountChars: uint32
    dwFillAttribute: uint32
    dwFlags: uint32
    wShowWindow: uint16
    cbReserved2: uint16
    lpReserved2: pointer
    hStdInput: pointer
    hStdOutput: pointer
    hStdError: pointer
struct STARTUPINFOW
{
    uint cb;
    void* lpReserved;
    void* lpDesktop;
    void* lpTitle;
    uint dwX;
    uint dwY;
    uint dwXSize;
    uint dwYSize;
    uint dwXCountChars;
    uint dwYCountChars;
    uint dwFillAttribute;
    uint dwFlags;
    ushort wShowWindow;
    ushort cbReserved2;
    void* lpReserved2;
    void* hStdInput;
    void* hStdOutput;
    void* hStdError;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; STARTUPINFOW サイズ: 68 バイト(x86)
dim st, 17    ; 4byte整数×17(構造体サイズ 68 / 4 切り上げ)
; cb : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; lpReserved : LPWSTR (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; lpDesktop : LPWSTR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; lpTitle : LPWSTR (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwX : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwY : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwXSize : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwYSize : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; dwXCountChars : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; dwYCountChars : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; dwFillAttribute : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; dwFlags : STARTUPINFOW_FLAGS (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; wShowWindow : WORD (+48, 2byte)  wpoke st,48,値  /  値 = wpeek(st,48)
; cbReserved2 : WORD (+50, 2byte)  wpoke st,50,値  /  値 = wpeek(st,50)
; lpReserved2 : BYTE* (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; hStdInput : HANDLE (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; hStdOutput : HANDLE (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; hStdError : HANDLE (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; STARTUPINFOW サイズ: 104 バイト(x64)
dim st, 26    ; 4byte整数×26(構造体サイズ 104 / 4 切り上げ)
; cb : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; lpReserved : LPWSTR (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; lpDesktop : LPWSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; lpTitle : LPWSTR (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; dwX : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; dwY : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; dwXSize : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; dwYSize : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; dwXCountChars : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; dwYCountChars : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; dwFillAttribute : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; dwFlags : STARTUPINFOW_FLAGS (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; wShowWindow : WORD (+64, 2byte)  wpoke st,64,値  /  値 = wpeek(st,64)
; cbReserved2 : WORD (+66, 2byte)  wpoke st,66,値  /  値 = wpeek(st,66)
; lpReserved2 : BYTE* (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; hStdInput : HANDLE (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; hStdOutput : HANDLE (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; hStdError : HANDLE (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global STARTUPINFOW
    #field int cb
    #field intptr lpReserved
    #field intptr lpDesktop
    #field intptr lpTitle
    #field int dwX
    #field int dwY
    #field int dwXSize
    #field int dwYSize
    #field int dwXCountChars
    #field int dwYCountChars
    #field int dwFillAttribute
    #field int dwFlags
    #field short wShowWindow
    #field short cbReserved2
    #field intptr lpReserved2
    #field intptr hStdInput
    #field intptr hStdOutput
    #field intptr hStdError
#endstruct

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