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

STARTUPINFOA

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

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

フィールド

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

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

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

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

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

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

dwYDWORD4+36+20

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

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

dwXSizeDWORD4+40+24

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

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

dwYSizeDWORD4+44+28

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

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

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 and 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 より前のバージョンでこのフラグを使用するには、プログラム内で手動で定義します。

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

#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>

// STARTUPINFOA  (x64 104 / x86 68 バイト)
typedef struct STARTUPINFOA {
    DWORD cb;
    LPSTR lpReserved;
    LPSTR lpDesktop;
    LPSTR 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;
} STARTUPINFOA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct STARTUPINFOA
{
    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 STARTUPINFOA
    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 STARTUPINFOA(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 STARTUPINFOA {
    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 STARTUPINFOA 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
  STARTUPINFOA = 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 STARTUPINFOA = 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
  STARTUPINFOA {.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 STARTUPINFOA
{
    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 レイアウト)
; STARTUPINFOA サイズ: 68 バイト(x86)
dim st, 17    ; 4byte整数×17(構造体サイズ 68 / 4 切り上げ)
; cb : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; lpReserved : LPSTR (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; lpDesktop : LPSTR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; lpTitle : LPSTR (+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 レイアウト)
; STARTUPINFOA サイズ: 104 バイト(x64)
dim st, 26    ; 4byte整数×26(構造体サイズ 104 / 4 切り上げ)
; cb : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; lpReserved : LPSTR (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; lpDesktop : LPSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; lpTitle : LPSTR (+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 STARTUPINFOA
    #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, STARTUPINFOA        ; NSTRUCT 変数を確保
st->cb = 100
mes "cb=" + st->cb