STARTUPINFOW 構造体 (processthreadsapi.h)
作成時のプロセスのメイン ウィンドウのウィンドウ ステーション、デスクトップ、標準ハンドル、および外観を指定します。
構文
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;
DWORD dwFlags;
WORD wShowWindow;
WORD cbReserved2;
LPBYTE lpReserved2;
HANDLE hStdInput;
HANDLE hStdOutput;
HANDLE hStdError;
} STARTUPINFOW, *LPSTARTUPINFOW;
メンバー
cb
この構造体のサイズ (バイト単位)。
lpReserved
予約;は NULL である必要があります。
lpDesktop
デスクトップの名前、またはこのプロセスのデスクトップステーションとウィンドウステーションの両方の名前。 文字列の円記号は、文字列にデスクトップステーション名とウィンドウステーション名の両方が含まれていることを示します。
詳細については、「 デスクトップへのスレッド接続」を参照してください。
lpTitle
コンソール プロセスの場合、これは新しいコンソール ウィンドウが作成された場合にタイトル バーに表示されるタイトルです。 NULL の場合は、代わりに実行可能ファイルの名前がウィンドウ タイトルとして使用されます。 新しいコンソール ウィンドウを作成しない GUI またはコンソール プロセスの場合、このパラメーターは NULL である必要があります。
dwX
dwFlags でSTARTF_USEPOSITIONが指定されている場合、新しいウィンドウが作成された場合、このメンバーはウィンドウの左上隅の x オフセット (ピクセル単位) になります。 それ以外の場合、このメンバーは無視されます。
オフセットは、画面の左上隅からのオフセットです。 GUI プロセスの場合、CreateWindow の x パラメーターがCW_USEDEFAULTされている場合、新しいプロセスが CreateWindow を初めて呼び出して重複するウィンドウを作成する際に、指定した位置が使用されます。
dwY
dwFlags でSTARTF_USEPOSITIONが指定されている場合、新しいウィンドウが作成された場合、このメンバーはウィンドウの左上隅の y オフセット (ピクセル単位) になります。 それ以外の場合、このメンバーは無視されます。
オフセットは、画面の左上隅からのオフセットです。 GUI プロセスの場合、CreateWindow の y パラメーターがCW_USEDEFAULTされている場合、新しいプロセスが CreateWindow を初めて呼び出して重複するウィンドウを作成する際に、指定した位置が使用されます。
dwXSize
dwFlags でSTARTF_USESIZEが指定されている場合、このメンバーは、新しいウィンドウが作成された場合のウィンドウの幅 (ピクセル単位) です。 それ以外の場合、このメンバーは無視されます。
GUI プロセスの場合、これは CreateWindow の nWidth パラメーターがCW_USEDEFAULTされている場合に、新しいプロセスが CreateWindow を初めて呼び出して重複するウィンドウを作成するときにのみ使用されます。
dwYSize
dwFlags でSTARTF_USESIZEが指定されている場合、このメンバーは、新しいウィンドウが作成された場合のウィンドウの高さ (ピクセル単位) です。 それ以外の場合、このメンバーは無視されます。
GUI プロセスの場合、これは CreateWindow の nHeight パラメーターがCW_USEDEFAULTされている場合に、新しいプロセスが CreateWindow を初めて呼び出して重複するウィンドウを作成するときにのみ使用されます。
dwXCountChars
dwFlags がSTARTF_USECOUNTCHARSを指定している場合、コンソール プロセスで新しいコンソール ウィンドウが作成された場合、このメンバーは画面バッファーの幅を文字列で指定します。 それ以外の場合、このメンバーは無視されます。
dwYCountChars
dwFlags がSTARTF_USECOUNTCHARSを指定した場合、コンソール プロセスで新しいコンソール ウィンドウが作成された場合、このメンバーは画面バッファーの高さを文字行で指定します。 それ以外の場合、このメンバーは無視されます。
dwFillAttribute
dwFlags でSTARTF_USEFILLATTRIBUTEが指定されている場合、コンソール アプリケーションで新しいコンソール ウィンドウが作成された場合、このメンバーは初期テキストと背景色になります。 それ以外の場合、このメンバーは無視されます。
この値には、FOREGROUND_BLUE、FOREGROUND_GREEN、FOREGROUND_RED、FOREGROUND_INTENSITY、BACKGROUND_BLUE、BACKGROUND_GREEN、BACKGROUND_RED、BACKGROUND_INTENSITYの任意の組み合わせを指定できます。 たとえば、次の値の組み合わせでは、白い背景に赤いテキストが生成されます。
FOREGROUND_RED| BACKGROUND_RED| BACKGROUND_GREEN| BACKGROUND_BLUE
dwFlags
プロセスがウィンドウを作成するときに特定の STARTUPINFO メンバーを使用するかどうかを決定するビットフィールド。 このメンバーには、次の値の 1 つ以上を指定できます。
値 | 意味 |
---|---|
|
CreateProcess が呼び出されてから 2 秒間カーソルがフィードバック モードであることを示します。 [バックグラウンドで作業] カーソルが表示されます (マウス コントロール パネル ユーティリティの [ポインター] タブを参照)。
この 2 秒の間にプロセスが最初の GUI 呼び出しを行うと、システムはプロセスにさらに 5 秒を与えます。 この 5 秒間にプロセスにウィンドウが表示される場合、システムはウィンドウの描画を完了するためにプロセスにさらに 5 秒を与えます。 プロセスが描画されているかどうかに関係なく、 GetMessage の最初の呼び出し後にフィードバック カーソルがオフになります。 |
|
プロセスの開始時にフィードバック カーソルが強制的にオフになっていることを示します。 [標準選択] カーソルが表示されます。 |
|
プロセスによって作成されたウィンドウをタスク バーにピン留めできないことを示します。
このフラグは、STARTF_TITLEISAPPIDと組み合わせる必要があります。 |
|
ウィンドウ モードではなく、全画面表示モードでプロセスを実行する必要があることを示します。
このフラグは、x86 コンピューターで実行されているコンソール アプリケーションでのみ有効です。 |
|
lpTitle メンバーには AppUserModelID が含まれています。 この識別子は、タスク バーと [スタート] メニューがアプリケーションを表示する方法を制御し、正しいショートカットとジャンプ Listsに関連付けられます。 通常、アプリケーションでは、このフラグを設定する代わりに 、SetCurrentProcessExplicitAppUserModelID 関数と GetCurrentProcessExplicitAppUserModelID 関数を 使用します。 詳細については、「 アプリケーション ユーザー モデル ID」を参照してください。
STARTF_PREVENTPINNINGが使用されている場合、アプリケーション ウィンドウをタスク バーにピン留めすることはできません。 アプリケーションで AppUserModelID 関連のウィンドウ プロパティを使用すると、そのウィンドウに対してのみこの設定がオーバーライドされます。 このフラグは、STARTF_TITLEISLINKNAMEでは使用できません。 |
|
lpTitle メンバーには、このプロセスを開始するためにユーザーが呼び出したショートカット ファイル (.lnk) のパスが含まれています。 これは通常、起動されたアプリケーションを指す.lnk ファイルが呼び出されたときにシェルによって設定されます。 ほとんどのアプリケーションでは、この値を設定する必要はありません。
このフラグは、STARTF_TITLEISAPPIDでは使用できません。 |
|
コマンド ラインは、信頼されていないソースから取得されました。 詳細については、「解説」を参照してください。 |
|
dwXCountChars メンバーと dwYCountChars メンバーには、追加情報が含まれています。 |
|
dwFillAttribute メンバーには追加情報が含まれています。 |
|
hStdInput メンバーには追加情報が含まれています。
このフラグは 、STARTF_USESTDHANDLESでは使用できません。 |
|
dwX メンバーと dwY メンバーには、追加情報が含まれています。 |
|
wShowWindow メンバーには追加情報が含まれています。 |
|
dwXSize メンバーと dwYSize メンバーには、追加情報が含まれています。 |
|
hStdInput、hStdOutput、および hStdError メンバーには追加情報が含まれています。
プロセス作成関数の 1 つを呼び出すときにこのフラグを指定する場合、ハンドルは継承可能で、関数の bInheritHandles パラメーターを TRUE に設定する必要があります。 詳細については、「継承の 処理」を参照してください。 GetStartupInfo 関数の呼び出し時にこのフラグを指定した場合、これらのメンバーはプロセスの作成時に指定されたハンドル値またはINVALID_HANDLE_VALUEのいずれかになります。 ハンドルは、必要なくなったときに CloseHandle で閉じる必要があります。 このフラグは 、STARTF_USEHOTKEYでは使用できません。 |
wShowWindow
dwFlags でSTARTF_USESHOWWINDOWが指定されている場合、このメンバーには、showWindow 関数の nCmdShow パラメーターで指定できる値 (SW_SHOWDEFAULTを除く) のいずれかを指定できます。 それ以外の場合、このメンバーは無視されます。
GUI プロセスの場合、 ShowWindow が初めて呼び出されると、その nCmdShow パラメーターは無視されます wShowWindow は既定値を指定します。 ShowWindow の後続の呼び出しでは、ShowWindow の nCmdShow パラメーターがSW_SHOWDEFAULTに設定されている場合、wShowWindow メンバーが使用されます。
cbReserved2
C ランタイムで使用するために予約されています。は 0 である必要があります。
lpReserved2
C ランタイムで使用するために予約されています。は NULL である必要があります。
hStdInput
dwFlags でSTARTF_USESTDHANDLESが指定されている場合、このメンバーはプロセスの標準入力ハンドルです。 STARTF_USESTDHANDLESが指定されていない場合、標準入力の既定値はキーボード バッファーです。
dwFlags でSTARTF_USEHOTKEYが指定されている場合、このメンバーは、プロセスを所有するアプリケーションによって作成された最初の適格な最上位ウィンドウに、WM_SETHOTKEY メッセージの wParam パラメーターとして送信されるホットキー値を指定します。 WS_POPUP ウィンドウ スタイルを使用してウィンドウを作成した場合、WS_EX_APPWINDOW拡張ウィンドウ スタイルも設定されていない限り、このウィンドウは使用できません。 詳細については、「 CreateWindowEx」を参照してください。
それ以外の場合、このメンバーは無視されます。
hStdOutput
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
dwFlags でSTARTF_USESTDHANDLESが指定されている場合、このメンバーはプロセスの標準エラー ハンドルです。 それ以外の場合、このメンバーは無視され、標準エラーの既定値はコンソール ウィンドウのバッファーです。
注釈
グラフィカル ユーザー インターフェイス (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 );
}
この例の詳細については、「 プロセスの作成」を参照してください。
注意
processthreadsapi.h ヘッダーは、STARTUPINFO をエイリアスとして定義します。このエイリアスは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
Header | processthreadsapi.h (Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2 の Windows.h を含む) |