STARTUPINFO

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

typedef struct _STARTUPINFO {
    DWORD  cb;              // 構造体サイズ
    LPTSTR  lpReserved;     // 予約(0)
    LPTSTR  lpDesktop;      // デスクトップ
    LPTSTR  lpTitle;        // ウィンドウタイトル
    DWORD  dwX;             // x位置
    DWORD  dwY;             // y位置
    DWORD  dwXSize;         // xサイズ
    DWORD  dwYSize;         // yサイズ
    DWORD  dwXCountChars;   // 文字幅
    DWORD  dwYCountChars;   // 文字高
    DWORD  dwFillAttribute; // 文字色・背景色
    DWORD  dwFlags;         // フラグ
    WORD   wShowWindow;     // ウィンドウ表示形式
    WORD   cbReserved2;     // 予約(0)
    LPBYTE lpReserved2;     // 予約(0)
    HANDLE hStdInput;       // 標準入力
    HANDLE hStdOutput;      // 標準出力
    HANDLE hStdError;       // 標準エラー出力
} 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

Windows NT/2000/XP: コンソールプロセスで、新しいコンソールウィンドウが作成される場合に、スクリーンバッファの幅と高さを文字単位で指定します。このメンバは 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) Windows NT/2000/XP: dwXCountChars, dwYCountChars
0x00000010 (STARTF_USEFILLATTRIBUTE) dwFillAttribute
0x00000100 (STARTF_USESTDHANDLES) hStdInput, hStdOutput, hStdError

他にも、オプションフラグを以下の値の組み合わせで指定できます。

意味
0x00000020 (STARTF_RUNFULLSCREEN)

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

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

0x00000040 (STARTF_FORCEONFEEDBACK)

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

0x00000080 (STARTF_FORCEOFFFEEDBACK)

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

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 にはキーボードバッファ、 hStdOutputhStdError にはコンソールウィンドウバッファのハンドルが設定されます。これらのハンドルが継承可能であり、かつ CreateProcess 関数の bInheritHandles パラメータに 1 (TRUE) が指定されている必要があります。

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

解説

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

プロセスは、 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