STARTUPINFO

CreateProcess関数、CreateProcessAsUser関数、CreateProcessWithLogonW関数のパラメータとして、プロセスを作成する際のウィンドウステーション、デスクトップ、標準ハンドル、メインウィンドウの表示に関する属性を指定するのに使用されます。

typedef struct _STARTUPINFO {
    DWORD  cb;              // structure size
    LPTSTR lpReserved;      // reserved
    LPTSTR lpDesktop;       // desktop
    LPTSTR lpTitle;         // window caption
    DWORD  dwX;             // X position
    DWORD  dwY;             // Y position
    DWORD  dwXSize;         // X size
    DWORD  dwYSize;         // Y size
    DWORD  dwXCountChars;   // witdh in character
    DWORD  dwYCountChars;   // height in character
    DWORD  dwFillAttribute; // character and background color
    DWORD  dwFlags;         // flags
    WORD   wShowWindow;     // how window to be shown
    WORD   cbReserved2;     // reserved
    LPBYTE lpReserved2;     // reserved
    HANDLE hStdInput;       // standard input
    HANDLE hStdOutput;      // standard output
    HANDLE hStdError;       // standard error output
} STARTUPINFO, *LPSTARTUPINFO;

メンバ

GUIアプリケーションとコンソールアプリケーションで使われるメンバを以下に示します。

メンバ名 GUIアプリケーション コンソールアプリケーション
cb 〇 〇
lpReserved 〇 〇
lpDesktop 〇 〇
lpTitle 〇  
dwX 〇 〇
dwY 〇 〇
dwXSize 〇 〇
dwYSize 〇 〇
dwXCountChars   〇
dwYCountChars   〇
dwFillAttrbute   〇
dwFlags 〇 〇
wShowWindow 〇  
cbReserved2 〇 〇
lpReserved2 〇 〇
hStdInput   〇
hStdOutput   〇
hStdError   〇
cb

構造体のサイズをバイト単位で指定します。この値は68になります。

lpReserved

予約されています。0 (NULL) を指定しなければなりません。

lpDesktop

このプロセスが起動するための、デスクトップの名前のみを表す文字列のアドレスか、または、デスクトップとウィンドウステーションの両方の名前を表す文字列のアドレスを指定します。文字列中にバックスラッシュは、デスクトップとウィンドウステーションの両方の名前が指定されていることを示します。

CreateProcess関数およびCreateProcessAsUser関数の呼び出しでは、このメンバに0 (NULL) を指定した場合は、親プロセスのデスクトップおよびウィンドウステーションを継承します。空文字列のアドレスが指定された場合は、親プロセスのデスクトップおよびウィンドウステーションを継承せずに、システムは新しいデスクトップおよびウィンドウステーションを作成する必要があるかどうかを決定します。

CreateProcessWithLogonW関数の呼び出しでは、このメンバに0 (NULL) を指定するか、空文字列のアドレスを指定した場合は、親プロセスのデスクトップおよびウィンドウステーションを継承し、指定されたユーザーアカウントに対するパーミッション(許可)を継承されたウィンドウステーションおよびデスクトップに追加します。それ以外の場合は、このメンバにデスクトップが指定されている場合には、アプリケーションが指定されたユーザーアカウントに対するパーミッションを指定されたウィンドウステーションおよびデスクトップに追加しなければいけません。

Windows 95/98/Me: デスクトップおよびウィンドウステーションはサポートされません。このメンバには0 (NULL) を指定します。

lpTitle

コンソールプロセスでは、新しいコンソールウィンドウが作成される場合にタイトルバーに表示されるタイトル文字列のアドレスを指定します。0 (NULL) を指定すると、実行ファイル名がウィンドウタイトルになります。GUIプロセスまたはウィンドウを表示しないコンソールプロセスでは0 (NULL) を指定しなければなりません。

dwX, dwY

新しいウィンドウが作成される場合に、ウィンドウの x 座標および y 座標をピクセル単位で指定します。この座標はスクリーン座標系で指定します。GUIプロセスでは、最初に新しいプロセスがCreateWindow関数またはCreateWindowEx関数を呼び出してオーバーラップウィンドウを作成するときに、xパラメータおよびyパラメータにCW_USEDEFAULTを指定した場合に、このメンバで指定された座標が使われます。このメンバはdwFlagsメンバでSTARTF_USESIZEを指定している場合にのみ有効です。

dwXSize, dwYSize

新しいウィンドウが作成される場合に、ウィンドウの幅および高さをピクセル単位で指定します。アプリケーションの最初のウィンドウの幅および高さです。GUIプロセスでは、最初に新しいプロセスがCreateWindow関数またはCreateWindowEx関数を呼び出してオーバーラップウィンドウを作成するときに、nWidthパラメータおよびnHeightパラメータにCW_USEDEFAULTを指定した場合に、このメンバで指定された幅および高さが使われます。このメンバはdwFlagsメンバでSTARTF_USESIZEを指定している場合にのみ有効です。

dwXCountChars, dwYCountChars

コンソールプロセスで、新しいコンソールウィンドウが作成される場合に、スクリーンバッファの幅と高さを文字単位で指定します。このメンバはdwFlagsメンバでSTARTF_USECOUNTCHARSを指定している場合にのみ有効です。

Windows 95/98/Me: このメンバは無視されます。

dwFillAttrbute

コンソールアプリケーションで新しいコンソールウィンドウが作成される場合に、コンソールアプリケーションの文字色と背景色の初期値を指定します。このメンバはGUIアプリケーションでは無視されます。以下の値の組み合わせで指定することができます。

0x0001 (FOREGROUND_BLUE)

文字色に青を含めます。

0x0002 (FOREGROUND_GREEN)

文字色に緑を含めます。

0x0004 (FOREGROUND_RED)

文字色に赤を含めます。

0x0008 (FOREGROUND_INTENSITY)

文字色を強調します。

0x0010 (BACKGROUND_BLUE)

背景色に青を含めます。

0x0020 (BACKGROUND_GREEN)

背景色に緑を含めます。

0x0040 (BACKGROUND_RED)

背景色に赤を含めます。

0x0080 (BACKGROUND_INTENSITY)

背景色を強調します。

このメンバはdwFlagsメンバでSTARTF_USEFILLATTRIBUTEを指定している場合にのみ有効です。

dwFlags

プロセスがウィンドウを作成する際に構造体のメンバを有効にするかどうかを表すオプションフラグを指定します。以下の値の組み合わせを指定することができます。

0x00000001 (STARTF_USESHOWWINDOW)

wShowWindowメンバが有効です。

0x00000002 (STARTF_USESIZE)

dwXsize, dwYsizeメンバが有効です。

0x00000004 (STARTF_USEPOSITION)

dwX, dwYメンバが有効です。

0x00000008 (STARTF_USECOUNTCHARS)

dwXCountChars, dwYCountCharsメンバが有効です。

Windows 95/98/Me: この値はサポートされません。

0x00000010 (STARTF_USEFILLATTRIBUTE)

dwFillAttributeメンバが有効です。

0x00000020 (STARTF_RUNFULLSCREEN)

x86コンピュータで実行されるコンソールアプリケーションにおいて、プロセスをウィンドウモードでなくフルスクリーンモードで実行するように指定します。

Windows 95/98/Me: この値はサポートされません。

0x00000040 (STARTF_FORCEONFEEDBACK)

起動時にカーソルを変更します。(下記を参照)

0x00000080 (STARTF_FORCEOFFFEEDBACK)

起動時にカーソルを変更しません。

0x00000100 (STARTF_USESTDHANDLES)

hStdInput, hStdOutput, hStdErrorメンバが有効です。

STARTF_FORCEONFEEDBACKフラグを指定すると、起動時にカーソルが start glass(矢印と砂時計のカーソル)に変更されます。その後新しいプロセスが2秒以内にGUI APIを呼び出さなかった場合には、カーソルがデフォルト形状に戻されます。

一方、2秒以内にGUI APIが呼び出された場合には、アプリケーションのウィンドウが表示されるのを待ちます。5秒以内に表示されない場合はカーソルをデフォルトに戻します。5秒以内に表示された場合はさらに5秒間待機します。

ただしGetMessage関数が呼び出された場合には、プロセスの初期化が終了したとして、カーソルをデフォルトに戻してプロセスの監視を終了します。

wShowWindow

ShowWindow関数のnCmdShowパラメータとして指定することのできるSW_値を指定します。GUIプロセスでは、最初にShowWindow関数が呼び出されたときnCmdShowパラメータの値は無視され、このメンバで指定された値が使われます。また、2回目以降の呼び出しでnCmdShowパラメータにSW_SHOWDEFAULTが指定された場合に、このメンバで指定された値が使われます。このメンバはdwFlagsメンバでSTARTF_USESHOWWINDOWを指定している場合にのみ有効です。

cbReserved2

Cランタイムのために予約されています。0 を指定しなければなりません。

lpReserved2

Cランタイムのために予約されています。0 (NULL) を指定しなければなりません。

hStdInput, hStdOutput, hStdError

それぞれ、プロセスの標準入力ハンドル、標準出力ハンドル、標準エラーハンドルとして使われるハンドルを指定します。デフォルトではhStdInputにはキーボードバッファ、hStdOutputおよびhStdErrorにはコンソールウィンドウバッファのハンドルが設定されます。これらのハンドルが継承可能であり、かつCreateProcess関数のbInheritHandlesパラメータに1 (TRUE) が指定されている必要があります。

dwFlagsメンバにSTARTF_USESTDHANDLESフラグが指定されていない場合には、これらのメンバは無視されます。

解説

GUIプロセスでは、CreateWindow関数またはCreateWindowEx関数で作成され、ShowWindow関数で表示される最初のウィンドウに対してこの構造体で指定される属性が指定されます。コンソールプロセスでは、新しいプロセスでコンソールが作成される場合にコンソールウィンドウに対してこの属性が指定されます。プロセスは、GetStartupInfo関数を使用して、自身のプロセスが作成されたときのSTARTUPINFO構造体を取得することができます。

対応情報

Windows 95 以降 / Windows NT 3.1 以降

変数との対応

HSP 変数 メンバ
メンバ名 オフセット サイズ
stinfo(0) cb ( = 68 ) 0 4
stinfo(1) lpReserved 4 4
stinfo(2) lpDesktop 8 4
stinfo(3) lpTitle 12 4
stinfo(4) dwX 16 4
stinfo(5) dwY 20 4
stinfo(6) dwXSize 24 4
stinfo(7) dwYSize 28 4
stinfo(8) dwXCountChars 32 4
stinfo(9) dwYCountChars 36 4
stinfo(10) dwFillAttribute 40 4
stinfo(11) dwFlags 44 4
stinfo(12) 下位ワード wShowWindow 48 2
上位ワード cbReserved2 50 2
stinfo(13) lpReserved2 52 4
stinfo(14) hStdInput 56 4
stinfo(15) hStdOutput 60 4
stinfo(16) hStdError 64 4