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 進程,只有在新進程第一次呼叫 CreateWindow 時,才會使用此程式來建立重疊的視窗,如果 CreateWindownWidth 參數CW_USEDEFAULT。

dwYSize

如果 dwFlags 指定STARTF_USESIZE,如果建立新的視窗,則此成員是視窗的高度,以像素為單位。 否則,會忽略這個成員。

對於 GUI 進程,只有在新進程第一次呼叫 CreateWindow 時,才會使用此程式來建立重疊的視窗,如果 CreateWindownHeight 參數CW_USEDEFAULT。

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 成員。 這個成員可以是下列一或多個值。

意義
STARTF_FORCEONFEEDBACK
0x00000040
表示在呼叫 CreateProcess 之後,游標處於意見反應模式兩秒。 [背景工作] 游標會顯示 (在滑鼠控制面板公用程式) 中看到 [指標] 索引標籤。

如果在這兩秒期間,進程會進行第一次 GUI 呼叫,則系統會為進程提供五秒以上的時間。 如果在這五秒期間,進程會顯示視窗,則系統會為進程提供五秒的時間,以完成繪製視窗。

系統會在第一次呼叫 GetMessage 之後關閉意見反應游標,不論程式是否繪製。

STARTF_FORCEOFFFEEDBACK
0x00000080
表示啟動程式時,會強制關閉意見反應數據指標。 [一般選取] 游標隨即顯示。
STARTF_PREVENTPINNING
0x00002000
表示進程所建立的任何視窗都無法釘選在任務欄上。

此旗標必須與STARTF_TITLEISAPPID結合。

STARTF_RUNFULLSCREEN
0x00000020
指出進程應該以全螢幕模式執行,而不是以視窗模式執行。

此旗標僅適用於在 x86 計算機上執行的主控台應用程式。

STARTF_TITLEISAPPID
0x00001000
lpTitle 成員包含 AppUserModelID。 此標識符會控制任務列和 [開始] 功能表呈現應用程式的方式,並讓它與正確的快捷方式和跳躍 清單 相關聯。 一般而言,應用程式會使用 SetCurrentProcessExplicitAppUserModelIDGetCurrentProcessExplicitAppUserModelID 函式,而不是設定此旗標。 如需詳細資訊,請參閱 應用程式使用者模型標識碼

如果使用STARTF_PREVENTPINNING,就無法將應用程式視窗釘選在任務列上。 應用程式使用任何 AppUserModelID 相關視窗屬性只會覆寫該視窗的此設定。

此旗標不能與STARTF_TITLEISLINKNAME搭配使用。

STARTF_TITLEISLINKNAME
0x00000800
lpTitle 成員包含快捷方式檔案的路徑, (.lnk) 用戶叫用以啟動此程式。 當叫用指向已啟動應用程式的.lnk檔案時,通常會由殼層設定。 大部分的應用程式都不需要設定此值。

此旗標不能與 STARTF_TITLEISAPPID搭配使用。

STARTF_UNTRUSTEDSOURCE
0x00008000
命令行來自不受信任的來源。 如需詳細資訊,請參閱<備註>。
STARTF_USECOUNTCHARS
0x00000008
dwXCountCharsdwYCountChars 成員包含其他資訊。
STARTF_USEFILLATTRIBUTE
0x00000010
dwFillAttribute成員包含其他資訊。
STARTF_USEHOTKEY
0x00000200
hStdInput 成員包含其他資訊。

此旗標不能與 STARTF_USESTDHANDLES搭配使用。

STARTF_USEPOSITION
0x00000004
dwXdwY 成員包含其他資訊。
STARTF_USESHOWWINDOW
0x00000001
wShowWindow 成員包含其他資訊。
STARTF_USESIZE
0x00000002
dwXSizedwYSize 成員包含其他資訊。
STARTF_USESTDHANDLES
0x00000100
hStdInputhStdOutputhStdError 成員包含其他資訊。

如果在呼叫其中一個進程建立函式時指定此旗標,則必須繼承句柄,而且函式的 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 執行時間使用;必須是零。

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」的 GUI 進程。

如果進程是從任務欄或跳躍清單啟動,系統會設定 GetStartupInfo 來擷取 STARTUPINFO 結構,並檢查 是否已設定 hStdOutput 。 如果是,請使用 GetMonitorInfo 來檢查 hStdOutput 是否為有效的監視句柄, (HMONITOR) 。 接著,進程可以使用句柄來放置視窗。

如果指定 STARTF_UNTRUSTEDSOURCE 旗標,應用程式應該注意命令行不受信任。 如果設定此旗標,應用程式應該停用潛在的危險功能,例如宏、下載的內容和自動列印。 此旗標是選擇性的,但建議呼叫 CreateProcess 的應用程式在啟動具有不受信任命令行自變數的程式時設定此旗標, (例如 Web 內容所提供的自變數) ,讓新建立的程式可以套用適當的原則。

從 Windows Vista 開始支援STARTF_UNTRUSTEDSOURCE旗標,但在 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 [僅限桌面應用程式]
標頭 processthreadsapi.h (Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2)

另請參閱

CreateProcess

CreateProcessAsUser

CreateProcessWithLogonW

CreateProcessWithTokenW

GetStartupInfo