STARTUPINFOA 構造体 (processthreadsapi.h)

作成時のプロセスのメイン ウィンドウのウィンドウ ステーション、デスクトップ、標準ハンドル、および外観を指定します。

構文

typedef struct _STARTUPINFOA {
  DWORD  cb;
  LPSTR  lpReserved;
  LPSTR  lpDesktop;
  LPSTR  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;
} STARTUPINFOA, *LPSTARTUPINFOA;

メンバー

cb

この構造体のサイズ (バイト単位)。

lpReserved

予約;は NULL である必要があります。

lpDesktop

デスクトップの名前、またはこのプロセスのデスクトップステーションとウィンドウステーションの両方の名前。 文字列の円記号は、文字列にデスクトップステーション名とウィンドウステーション名の両方が含まれていることを示します。

詳細については、「 デスクトップへのスレッド接続」を参照してください。

lpTitle

コンソール プロセスの場合、これは新しいコンソール ウィンドウが作成された場合にタイトル バーに表示されるタイトルです。 NULL の場合は、代わりに実行可能ファイルの名前がウィンドウ タイトルとして使用されます。 新しいコンソール ウィンドウを作成しない GUI またはコンソール プロセスの場合、このパラメーターは NULL である必要があります。

dwX

dwFlags でSTARTF_USEPOSITIONが指定されている場合、新しいウィンドウが作成された場合、このメンバーはウィンドウの左上隅の x オフセット (ピクセル単位) になります。 それ以外の場合、このメンバーは無視されます。

オフセットは、画面の左上隅からのオフセットです。 GUI プロセスの場合、CreateWindowx パラメーターがCW_USEDEFAULTされている場合、新しいプロセスが CreateWindow を初めて呼び出して重複するウィンドウを作成する際に、指定した位置が使用されます。

dwY

dwFlags でSTARTF_USEPOSITIONが指定されている場合、新しいウィンドウが作成された場合、このメンバーはウィンドウの左上隅の y オフセット (ピクセル単位) になります。 それ以外の場合、このメンバーは無視されます。

オフセットは、画面の左上隅からのオフセットです。 GUI プロセスの場合、CreateWindowy パラメーターがCW_USEDEFAULTされている場合、新しいプロセスが CreateWindow を初めて呼び出して重複するウィンドウを作成する際に、指定した位置が使用されます。

dwXSize

dwFlags でSTARTF_USESIZEが指定されている場合、このメンバーは、新しいウィンドウが作成された場合のウィンドウの幅 (ピクセル単位) です。 それ以外の場合、このメンバーは無視されます。

GUI プロセスの場合、これは CreateWindownWidth パラメーターがCW_USEDEFAULTされている場合に、新しいプロセスが CreateWindow を初めて呼び出して重複するウィンドウを作成するときにのみ使用されます。

dwYSize

dwFlags でSTARTF_USESIZEが指定されている場合、このメンバーは、新しいウィンドウが作成された場合のウィンドウの高さ (ピクセル単位) です。 それ以外の場合、このメンバーは無視されます。

GUI プロセスの場合、これは CreateWindownHeight パラメーターが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 つ以上を指定できます。

意味
STARTF_FORCEONFEEDBACK
0x00000040
CreateProcess が呼び出されてから 2 秒間カーソルがフィードバック モードであることを示します。 [バックグラウンドで作業] カーソルが表示されます (マウス コントロール パネル ユーティリティの [ポインター] タブを参照)。

この 2 秒の間にプロセスが最初の GUI 呼び出しを行うと、システムはプロセスにさらに 5 秒を与えます。 この 5 秒間にプロセスにウィンドウが表示される場合、システムはウィンドウの描画を完了するためにプロセスにさらに 5 秒を与えます。

プロセスが描画されているかどうかに関係なく、 GetMessage の最初の呼び出し後にフィードバック カーソルがオフになります。

STARTF_FORCEOFFFEEDBACK
0x00000080
プロセスの開始時にフィードバック カーソルが強制的にオフになっていることを示します。 [標準選択] カーソルが表示されます。
STARTF_PREVENTPINNING
0x00002000
プロセスによって作成されたウィンドウをタスク バーにピン留めできないことを示します。

このフラグは、STARTF_TITLEISAPPIDと組み合わせる必要があります。

STARTF_RUNFULLSCREEN
0x00000020
ウィンドウ モードではなく、全画面表示モードでプロセスを実行する必要があることを示します。

このフラグは、x86 コンピューターで実行されているコンソール アプリケーションでのみ有効です。

STARTF_TITLEISAPPID
0x00001000
lpTitle メンバーには AppUserModelID が含まれています。 この識別子は、タスク バーと [スタート] メニューがアプリケーションを表示する方法を制御し、正しいショートカットとジャンプ Listsに関連付けられます。 通常、アプリケーションでは、このフラグを設定する代わりに 、SetCurrentProcessExplicitAppUserModelID 関数と GetCurrentProcessExplicitAppUserModelID 関数を 使用します。 詳細については、「 アプリケーション ユーザー モデル ID」を参照してください。

STARTF_PREVENTPINNINGが使用されている場合、アプリケーション ウィンドウをタスク バーにピン留めすることはできません。 アプリケーションで AppUserModelID 関連のウィンドウ プロパティを使用すると、そのウィンドウに対してのみこの設定がオーバーライドされます。

このフラグは、STARTF_TITLEISLINKNAMEでは使用できません。

STARTF_TITLEISLINKNAME
0x00000800
lpTitle メンバーには、このプロセスを開始するためにユーザーが呼び出したショートカット ファイル (.lnk) のパスが含まれています。 これは通常、起動されたアプリケーションを指す.lnk ファイルが呼び出されたときにシェルによって設定されます。 ほとんどのアプリケーションでは、この値を設定する必要はありません。

このフラグは、STARTF_TITLEISAPPIDでは使用できません。

STARTF_UNTRUSTEDSOURCE
0x00008000
コマンド ラインは、信頼されていないソースから取得されました。 詳細については、「解説」を参照してください。
STARTF_USECOUNTCHARS
0x00000008
dwXCountChars メンバーと dwYCountChars メンバーには、追加情報が含まれています。
STARTF_USEFILLATTRIBUTE
0x00000010
dwFillAttribute メンバーには追加情報が含まれています。
STARTF_USEHOTKEY
0x00000200
hStdInput メンバーには追加情報が含まれています。

このフラグは 、STARTF_USESTDHANDLESでは使用できません。

STARTF_USEPOSITION
0x00000004
dwX メンバーと dwY メンバーには、追加情報が含まれています。
STARTF_USESHOWWINDOW
0x00000001
wShowWindow メンバーには追加情報が含まれています。
STARTF_USESIZE
0x00000002
dwXSize メンバーと dwYSize メンバーには、追加情報が含まれています。
STARTF_USESTDHANDLES
0x00000100
hStdInputhStdOutput、および hStdError の各メンバーには、追加情報が含まれています。

プロセス作成関数のいずれかを呼び出すときにこのフラグを指定する場合、ハンドルは継承可能であり、関数の bInheritHandles パラメーターを TRUE に設定する必要があります。 詳細については、「継承の 処理」を参照してください。

GetStartupInfo 関数を呼び出すときにこのフラグを指定した場合、これらのメンバーは、プロセスの作成時に指定されたハンドル値またはINVALID_HANDLE_VALUEのいずれかになります。

ハンドルは、必要なくなったときに CloseHandle で閉じる必要があります。

このフラグは 、STARTF_USEHOTKEYでは使用できません。

wShowWindow

dwFlags でSTARTF_USESHOWWINDOWが指定されている場合、このメンバーには、showWindow 関数の nCmdShow パラメーターで指定できる値のうち、SW_SHOWDEFAULTを除く任意の値を指定できます。 それ以外の場合、このメンバーは無視されます。

GUI プロセスの場合、 ShowWindow が初めて呼び出されると、その nCmdShow パラメーターは無視されます 。wShowWindow は既定値を指定します。 ShowWindow の後続の呼び出しでは、ShowWindownCmdShow パラメーターが 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より前のバージョンで フラグを使用するには、プログラムで手動で定義できます。

次のコード例は、 StartUpInfoA の使用方法を示しています。

#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 バージョンを自動的に選択します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
Header processthreadsapi.h (Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2 の Windows.h を含む)

こちらもご覧ください

CreateProcess

CreateProcessAsUser

CreateProcessWithLogonW

CreateProcessWithTokenW

GetStartupInfo