STARTUPINFOW
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cb | DWORD | 4 | +0 | +0 | 構造体のサイズ (バイト単位)。 | ||||||||||||||||||||||||||||||||
| lpReserved | LPWSTR | 8/4 | +8 | +4 | 予約済みです。NULL でなければなりません。 | ||||||||||||||||||||||||||||||||
| lpDesktop | LPWSTR | 8/4 | +16 | +8 | このプロセスのデスクトップ名、またはデスクトップ名とウィンドウステーション名の両方です。文字列中のバックスラッシュは、その文字列にデスクトップ名とウィンドウステーション名の両方が含まれていることを示します。 詳細については、「Thread Connection to a Desktop」を参照してください。 | ||||||||||||||||||||||||||||||||
| lpTitle | LPWSTR | 8/4 | +24 | +12 | コンソールプロセスの場合、新しいコンソールウィンドウが作成されるときにタイトルバーに表示されるタイトルです。NULL の場合は、代わりに実行可能ファイルの名前がウィンドウのタイトルとして使用されます。GUI プロセス、または新しいコンソールウィンドウを作成しないコンソールプロセスでは、このパラメーターは NULL でなければなりません。 | ||||||||||||||||||||||||||||||||
| dwX | DWORD | 4 | +32 | +16 | dwFlags で STARTF_USEPOSITION が指定されている場合、このメンバーは、新しいウィンドウが作成されるときのウィンドウ左上隅の x オフセット (ピクセル単位) です。それ以外の場合、このメンバーは無視されます。 オフセットは画面の左上隅からの値です。GUI プロセスの場合、CreateWindow の x パラメーターが CW_USEDEFAULT のときに、新しいプロセスが最初に CreateWindow を呼び出してオーバーラップウィンドウを作成する際に、指定された位置が使用されます。 | ||||||||||||||||||||||||||||||||
| dwY | DWORD | 4 | +36 | +20 | dwFlags で STARTF_USEPOSITION が指定されている場合、このメンバーは、新しいウィンドウが作成されるときのウィンドウ左上隅の y オフセット (ピクセル単位) です。それ以外の場合、このメンバーは無視されます。 オフセットは画面の左上隅からの値です。GUI プロセスの場合、CreateWindow の y パラメーターが CW_USEDEFAULT のときに、新しいプロセスが最初に CreateWindow を呼び出してオーバーラップウィンドウを作成する際に、指定された位置が使用されます。 | ||||||||||||||||||||||||||||||||
| dwXSize | DWORD | 4 | +40 | +24 | dwFlags で STARTF_USESIZE が指定されている場合、このメンバーは、新しいウィンドウが作成されるときのウィンドウの幅 (ピクセル単位) です。それ以外の場合、このメンバーは無視されます。 GUI プロセスの場合、これは CreateWindow の nWidth パラメーターが CW_USEDEFAULT のときに、新しいプロセスが最初に CreateWindow を呼び出してオーバーラップウィンドウを作成する場合にのみ使用されます。 | ||||||||||||||||||||||||||||||||
| dwYSize | DWORD | 4 | +44 | +28 | dwFlags で STARTF_USESIZE が指定されている場合、このメンバーは、新しいウィンドウが作成されるときのウィンドウの高さ (ピクセル単位) です。それ以外の場合、このメンバーは無視されます。 GUI プロセスの場合、これは CreateWindow の nHeight パラメーターが CW_USEDEFAULT のときに、新しいプロセスが最初に CreateWindow を呼び出してオーバーラップウィンドウを作成する場合にのみ使用されます。 | ||||||||||||||||||||||||||||||||
| dwXCountChars | DWORD | 4 | +48 | +32 | dwFlags で STARTF_USECOUNTCHARS が指定されている場合、コンソールプロセスで新しいコンソールウィンドウが作成されるときに、このメンバーはスクリーンバッファーの幅を文字の桁数で指定します。それ以外の場合、このメンバーは無視されます。 | ||||||||||||||||||||||||||||||||
| dwYCountChars | DWORD | 4 | +52 | +36 | dwFlags で STARTF_USECOUNTCHARS が指定されている場合、コンソールプロセスで新しいコンソールウィンドウが作成されるときに、このメンバーはスクリーンバッファーの高さを文字の行数で指定します。それ以外の場合、このメンバーは無視されます。 | ||||||||||||||||||||||||||||||||
| dwFillAttribute | DWORD | 4 | +56 | +40 | dwFlags で STARTF_USEFILLATTRIBUTE が指定されている場合、このメンバーは、コンソールアプリケーションで新しいコンソールウィンドウが作成されるときの初期のテキスト色と背景色です。それ以外の場合、このメンバーは無視されます。 この値には、次の値の任意の組み合わせを指定できます。FOREGROUND_BLUE、FOREGROUND_GREEN、FOREGROUND_RED、FOREGROUND_INTENSITY、BACKGROUND_BLUE、BACKGROUND_GREEN、BACKGROUND_RED、BACKGROUND_INTENSITY。たとえば、次の値の組み合わせは白い背景に赤いテキストを表示します。
| ||||||||||||||||||||||||||||||||
| dwFlags | STARTUPINFOW_FLAGS | 4 | +60 | +44 | プロセスがウィンドウを作成する際に、特定の STARTUPINFO メンバーを使用するかどうかを決定するビットフィールドです。このメンバーには、次の値の 1 つ以上を指定できます。
| ||||||||||||||||||||||||||||||||
| wShowWindow | WORD | 2 | +64 | +48 | dwFlags で STARTF_USESHOWWINDOW が指定されている場合、このメンバーには、ShowWindow 関数の nCmdShow パラメーターに指定できる値のうち、SW_SHOWDEFAULT を除く任意の値を指定できます。それ以外の場合、このメンバーは無視されます。 GUI プロセスの場合、 ShowWindow が最初に呼び出されるときは、その nCmdShow パラメーターは無視され、wShowWindow が既定値を指定します。それ以降の ShowWindow の呼び出しでは、ShowWindow の nCmdShow パラメーターが SW_SHOWDEFAULT に設定されている場合に wShowWindow メンバーが使用されます。 | ||||||||||||||||||||||||||||||||
| cbReserved2 | WORD | 2 | +66 | +50 | C ランタイムが使用するために予約済みです。0 でなければなりません。 | ||||||||||||||||||||||||||||||||
| lpReserved2 | BYTE* | 8/4 | +72 | +52 | C ランタイムが使用するために予約済みです。NULL でなければなりません。 | ||||||||||||||||||||||||||||||||
| hStdInput | HANDLE | 8/4 | +80 | +56 | dwFlags で STARTF_USESTDHANDLES が指定されている場合、このメンバーはプロセスの標準入力ハンドルです。STARTF_USESTDHANDLES が指定されていない場合、標準入力の既定値はキーボードバッファーです。 dwFlags で STARTF_USEHOTKEY が指定されている場合、このメンバーは、プロセスを所有するアプリケーションが作成した最初の対象となるトップレベルウィンドウに WM_SETHOTKEY メッセージの wParam パラメーターとして送信されるホットキー値を指定します。ウィンドウが WS_POPUP ウィンドウスタイルで作成されている場合、WS_EX_APPWINDOW 拡張ウィンドウスタイルも設定されていない限り、そのウィンドウは対象になりません。詳細については、CreateWindowEx を参照してください。 それ以外の場合、このメンバーは無視されます。 | ||||||||||||||||||||||||||||||||
| hStdOutput | HANDLE | 8/4 | +88 | +60 | dwFlags で STARTF_USESTDHANDLES が指定されている場合、このメンバーはプロセスの標準出力ハンドルです。それ以外の場合、このメンバーは無視され、標準出力の既定値はコンソールウィンドウのバッファーになります。 プロセスがタスクバーまたはジャンプリストから起動された場合、システムは hStdOutput に、そのプロセスの起動に使用されたタスクバーまたはジャンプリストを含むモニターへのハンドルを設定します。詳細については、「解説」を参照してください。Windows 7、Windows Server 2008 R2、Windows Vista、Windows Server 2008、Windows XP および Windows Server 2003: この動作は Windows 8 および Windows Server 2012 で導入されました。 | ||||||||||||||||||||||||||||||||
| hStdError | HANDLE | 8/4 | +96 | +64 | dwFlags で STARTF_USESTDHANDLES が指定されている場合、このメンバーはプロセスの標準エラーハンドルです。それ以外の場合、このメンバーは無視され、標準エラーの既定値はコンソールウィンドウのバッファーになります。 |
公式ドキュメント
プロセスの作成時に、ウィンドウステーション、デスクトップ、標準ハンドル、およびメインウィンドウの外観を指定します。
解説(Remarks)
グラフィカルユーザーインターフェイス (GUI) プロセスの場合、この情報は、 CreateWindow 関数によって作成され、 ShowWindow 関数によって表示される最初のウィンドウに影響します。コンソールプロセスの場合、この情報は、そのプロセスに対して新しいコンソールが作成されるときのコンソールウィンドウに影響します。プロセスは GetStartupInfo 関数を使用して、プロセスの作成時に指定された STARTUPINFO 構造体を取得できます。
GUI プロセスが開始されるときに STARTF_FORCEONFEEDBACK と STARTF_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 公式リファレンス: 英語 (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 Structureimport 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: pointerstruct 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