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 進程,如果 CreateWindow 的 x 參數CW_USEDEFAULT,則新進程會第一次呼叫 CreateWindow 來建立重疊的視窗時,會使用指定的位置。
dwY
如果 dwFlags 指定STARTF_USEPOSITION,如果建立新的視窗,則此成員是視窗左上角的 Y 位移,以像素為單位。 否則,會忽略這個成員。
位移是從畫面的左上角。 對於 GUI 進程,如果 CreateWindow 的 y 參數CW_USEDEFAULT,則新進程會第一次呼叫 CreateWindow 來建立重疊的視窗時,會使用指定的位置。
dwXSize
如果 dwFlags 指定STARTF_USESIZE,則建立新視窗時,此成員會是視窗的寬度,以像素為單位。 否則,會忽略這個成員。
對於 GUI 進程,只有在新進程第一次呼叫 CreateWindow 時,才會使用此程式來建立重疊的視窗,如果 CreateWindow 的 nWidth 參數CW_USEDEFAULT。
dwYSize
如果 dwFlags 指定STARTF_USESIZE,如果建立新的視窗,則此成員是視窗的高度,以像素為單位。 否則,會忽略這個成員。
對於 GUI 進程,只有在新進程第一次呼叫 CreateWindow 時,才會使用此程式來建立重疊的視窗,如果 CreateWindow 的 nHeight 參數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 成員。 這個成員可以是下列一或多個值。
值 | 意義 |
---|---|
|
表示在呼叫 CreateProcess 之後,游標處於意見反應模式兩秒。 [背景工作] 游標會顯示 (在滑鼠控制面板公用程式) 中看到 [指標] 索引標籤。
如果在這兩秒期間,進程會進行第一次 GUI 呼叫,則系統會為進程提供五秒以上的時間。 如果在這五秒期間,進程會顯示視窗,則系統會為進程提供五秒的時間,以完成繪製視窗。 系統會在第一次呼叫 GetMessage 之後關閉意見反應游標,不論程式是否繪製。 |
|
表示啟動程式時,會強制關閉意見反應數據指標。 [一般選取] 游標隨即顯示。 |
|
表示進程所建立的任何視窗都無法釘選在任務欄上。
此旗標必須與STARTF_TITLEISAPPID結合。 |
|
指出進程應該以全螢幕模式執行,而不是以視窗模式執行。
此旗標僅適用於在 x86 計算機上執行的主控台應用程式。 |
|
lpTitle 成員包含 AppUserModelID。 此標識符會控制任務列和 [開始] 功能表呈現應用程式的方式,並讓它與正確的快捷方式和跳躍 清單 相關聯。 一般而言,應用程式會使用 SetCurrentProcessExplicitAppUserModelID 和 GetCurrentProcessExplicitAppUserModelID 函式,而不是設定此旗標。 如需詳細資訊,請參閱 應用程式使用者模型標識碼。
如果使用STARTF_PREVENTPINNING,就無法將應用程式視窗釘選在任務列上。 應用程式使用任何 AppUserModelID 相關視窗屬性只會覆寫該視窗的此設定。 此旗標不能與STARTF_TITLEISLINKNAME搭配使用。 |
|
lpTitle 成員包含快捷方式檔案的路徑, (.lnk) 用戶叫用以啟動此程式。 當叫用指向已啟動應用程式的.lnk檔案時,通常會由殼層設定。 大部分的應用程式都不需要設定此值。
此旗標不能與 STARTF_TITLEISAPPID搭配使用。 |
|
命令行來自不受信任的來源。 如需詳細資訊,請參閱<備註>。 |
|
dwXCountChars 和 dwYCountChars 成員包含其他資訊。 |
|
dwFillAttribute成員包含其他資訊。 |
|
hStdInput 成員包含其他資訊。
此旗標不能與 STARTF_USESTDHANDLES搭配使用。 |
|
dwX 和 dwY 成員包含其他資訊。 |
|
wShowWindow 成員包含其他資訊。 |
|
dwXSize 和 dwYSize 成員包含其他資訊。 |
|
hStdInput、hStdOutput 和 hStdError 成員包含其他資訊。
如果在呼叫其中一個進程建立函式時指定此旗標,則必須繼承句柄,而且函式的 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 執行時間使用;必須是零。
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) |