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 | 〇 |
構造体のサイズをバイト単位で指定します。 68 を指定します。
予約されています。 0 (NULL) を指定しなければなりません。
このプロセスが起動するための、デスクトップの名前のみを表す文字列のアドレスか、または、デスクトップとウィンドウステーションの両方の名前を表す文字列のアドレスを指定します。文字列中にバックスラッシュは、デスクトップとウィンドウステーションの両方の名前が指定されていることを示します。
CreateProcess 関数および CreateProcessAsUser 関数の呼び出しでは、このメンバに 0 (NULL) を指定した場合は、親プロセスのデスクトップおよびウィンドウステーションを継承します。空文字列のアドレスが指定された場合は、親プロセスのデスクトップおよびウィンドウステーションを継承せずに、システムは新しいデスクトップおよびウィンドウステーションを作成する必要があるかどうかを決定します。
CreateProcessWithLogonW 関数の呼び出しでは、このメンバに 0 (NULL) を指定するか、空文字列のアドレスを指定した場合は、親プロセスのデスクトップおよびウィンドウステーションを継承し、指定されたユーザーアカウントに対するパーミッション(許可)を継承されたウィンドウステーションおよびデスクトップに追加します。それ以外の場合は、このメンバにデスクトップが指定されている場合には、アプリケーションが指定されたユーザーアカウントに対するパーミッションを指定されたウィンドウステーションおよびデスクトップに追加しなければいけません。
Windows 95/98/Me: デスクトップおよびウィンドウステーションはサポートされません。このメンバには 0 (NULL) を指定します。
コンソールプロセスでは、新しいコンソールウィンドウが作成される場合にタイトルバーに表示されるタイトル文字列のアドレスを指定します。 0 (NULL) を指定すると、実行ファイル名がウィンドウタイトルになります。 GUI プロセスまたはウィンドウを表示しないコンソールプロセスでは 0 (NULL) を指定しなければなりません。
新しいウィンドウが作成される場合に、ウィンドウの x 座標および y 座標をピクセル単位で指定します。この座標はスクリーン座標系で指定します。 GUI プロセスでは、最初に新しいプロセスが CreateWindow 関数または CreateWindowEx 関数を呼び出してオーバーラップウィンドウを作成するときに、 x パラメータおよび y パラメータに CW_USEDEFAULT を指定した場合に、このメンバで指定された座標が使われます。このメンバは dwFlags メンバで STARTF_USESIZE を指定している場合にのみ有効です。
新しいウィンドウが作成される場合に、ウィンドウの幅および高さをピクセル単位で指定します。アプリケーションの最初のウィンドウの幅および高さです。 GUI プロセスでは、最初に新しいプロセスが CreateWindow 関数または CreateWindowEx 関数を呼び出してオーバーラップウィンドウを作成するときに、 nWidth パラメータおよび nHeight パラメータに CW_USEDEFAULT を指定した場合に、このメンバで指定された幅および高さが使われます。このメンバは dwFlags メンバで STARTF_USESIZE を指定している場合にのみ有効です。
Windows NT/2000/XP: コンソールプロセスで、新しいコンソールウィンドウが作成される場合に、スクリーンバッファの幅と高さを文字単位で指定します。このメンバは dwFlags メンバで STARTF_USECOUNTCHARS を指定している場合にのみ有効です。
Windows 95/98/Me: このメンバは無視されます。
コンソールアプリケーションで新しいコンソールウィンドウが作成される場合に、コンソールアプリケーションの文字色と背景色の初期値を指定します。このメンバは 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 を指定している場合にのみ有効です。
構造体の有効なメンバとオプションフラグを表す値を指定します。
構造体のどのメンバを使うかを以下の値の組み合わせで指定します。
| 値 | 有効なメンバ |
|---|---|
| 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 関数が呼び出された場合には、プロセスの初期化が終了したとして、カーソルをデフォルトに戻してプロセスの監視を終了します。
ShowWindow 関数の nCmdShow パラメータとして指定することのできる SW_ 値を指定します。 GUI プロセスでは、最初に ShowWindow 関数が呼び出されたとき nCmdShow パラメータの値は無視され、このメンバで指定された値が使われます。また、2回目以降の呼び出しで nCmdShow パラメータに SW_SHOWDEFAULTが指定された場合に、このメンバで指定された値が使われます。このメンバは dwFlags メンバで STARTF_USESHOWWINDOW を指定している場合にのみ有効です。
Cランタイムのために予約されています。 0 を指定しなければなりません。
Cランタイムのために予約されています。 0 (NULL) を指定しなければなりません。
それぞれ、プロセスの標準入力ハンドル、標準出力ハンドル、標準エラーハンドルとして使われるハンドルを指定します。デフォルトでは hStdInput にはキーボードバッファ、 hStdOutput と hStdError にはコンソールウィンドウバッファのハンドルが設定されます。これらのハンドルが継承可能であり、かつ 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 | |