Структура 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, имя исполняемого файла используется в качестве заголовка окна. Этот параметр должен иметь значение NULL для процессов графического интерфейса или консоли, которые не создают новое окно консоли.
dwX
Если dwFlags указывает STARTF_USEPOSITION, этот элемент представляет собой смещение x левого верхнего угла окна, если создается новое окно в пикселях. В противном случае этот элемент игнорируется.
Смещение находится в левом верхнем углу экрана. Для процессов ГРАФИЧЕСКОго интерфейса указанная позиция используется при первом вызове нового процесса CreateWindow для создания перекрывающегося окна, если параметр x xCreateWindow CW_USEDEFAULT.
dwY
Если dwFlags указывает STARTF_USEPOSITION, этот элемент является смещением в левом верхнем углу окна, если создается новое окно в пикселях. В противном случае этот элемент игнорируется.
Смещение находится в левом верхнем углу экрана. Для процессов ГРАФИЧЕСКОго интерфейса указанная позиция используется при первом вызове нового процесса CreateWindow для создания перекрывающегося окна, если параметр yCreateWindow CW_USEDEFAULT.
dwXSize
Если dwFlags указывает STARTF_USESIZE, этот элемент имеет ширину окна, если создается новое окно в пикселях. В противном случае этот элемент игнорируется.
Для процессов графического интерфейса используется только при первом вызове нового процесса CreateWindow для создания перекрывающегося окна, если параметр nWidthCreateWindow CW_USEDEFAULT.
dwYSize
Если dwFlags указывает STARTF_USESIZE, этот элемент имеет высоту окна, если создается новое окно в пикселях. В противном случае этот элемент игнорируется.
Для процессов графического интерфейса используется только при первом вызове нового процесса CreateWindow для создания перекрывающегося окна, если параметр nHeightCreateWindow 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. Отображается курсор "Работа в фоновом режиме" (см. вкладку "Указатели" в служебной программе панели управления мыши).
Если в течение этих двух секунд процесс выполняет первый вызов графического интерфейса, система дает еще пять секунд процессу. Если в течение этих пяти секунд в процессе отображается окно, система дает еще пять секунд процессу, чтобы завершить рисование окна. Система отключает курсор обратной связи после первого вызова GetMessageнезависимо от того, выполняется ли процесс рисования. |
|
Указывает, что курсор обратной связи отключается во время запуска процесса. Отображается курсор "Обычный выбор". |
|
Указывает, что любые окна, созданные процессом, не могут быть закреплены на панели задач.
Этот флаг должен сочетаться с STARTF_TITLEISAPPID. |
|
Указывает, что процесс должен выполняться в полноэкранном режиме, а не в окне.
Этот флаг действителен только для консольных приложений, работающих на компьютере x86. |
|
Элемент Если используется STARTF_PREVENTPINNING, окна приложений нельзя закрепить на панели задач. Использование свойств окна, связанных с AppUserModelID, приложение переопределяет этот параметр только для этого окна. Этот флаг нельзя использовать с STARTF_TITLEISLINKNAME. |
|
Элемент Этот флаг нельзя использовать с STARTF_TITLEISAPPID. |
|
Командная строка была получена из ненадежного источника. Дополнительные сведения см. в разделе "Примечания". |
|
dwXCountChars и dwYCountChars содержат дополнительные сведения. |
|
Элемент dwFillAttribute |
|
Элемент hStdInput содержит дополнительные сведения.
Этот флаг нельзя использовать с STARTF_USESTDHANDLES. |
|
Элементы dwX и dw Y содержат дополнительные сведения. |
|
Элемент wShowWindow содержит дополнительные сведения. |
|
Элементы dwXSize |
|
hStdInput, hStdOutputи hStdError содержат дополнительные сведения.
Если этот флаг указан при вызове одной из функций создания процесса, дескриптор должен быть наследуемым, а параметр bInheritHandles должен иметь значение TRUE. Дополнительные сведения см. в разделе Дескриптор наследования. Если этот флаг указан при вызове функции GetStartupInfo, эти элементы являются значением дескриптора, указанным во время создания процесса или INVALID_HANDLE_VALUE. Маркеры должны быть закрыты с помощью CloseHandle, если они больше не нужны. Этот флаг нельзя использовать с STARTF_USEHOTKEY. |
wShowWindow
Если dwFlags указывает STARTF_USESHOWWINDOW, этот элемент может быть любым из значений, которые можно указать в параметре nCmdShow для функции ShowWindow, за исключением SW_SHOWDEFAULT. В противном случае этот элемент игнорируется.
При первом вызове
cbReserved2
Зарезервировано для использования во время выполнения C; должно быть равно нулю.
lpReserved2
Зарезервировано для использования во время выполнения C; должно иметь значение NULL.
hStdInput
Если dwFlags указывает STARTF_USESTDHANDLES, этот элемент является стандартным дескриптором входных данных для процесса. Если STARTF_USESTDHANDLES не указано, по умолчанию для стандартного ввода используется буфер клавиатуры.
Если dwFlags указывает STARTF_USEHOTKEY, этот элемент задает значение горячего ключа, которое отправляется в качестве параметра wParam сообщения WM_SETHOTKEY в первое соответствующее окно верхнего уровня, созданное приложением, которому принадлежит процесс. Если окно создается с использованием стиля окна 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
Если запускается процесс графического интерфейса и ни STARTF_FORCEONFEEDBACK, ни STARTF_FORCEOFFFEEDBACK не указан, используется курсор обратной связи процесса. Процесс графического интерфейса — это один из подсистем, подсистема которого указана как "windows".
Если процесс запускается с панели задач или списка переходов, системные наборы GetStartupInfo для получения структуры STARTUPINFO и убедитесь, что задан hStdOutput. Если это так, используйте GetMonitorInfo, чтобы проверить, является ли hStdOutput допустимым дескриптором монитора (HMONITOR). Затем процесс может использовать дескриптор для размещения окон.
Если указан флаг STARTF_UNTRUSTEDSOURCE, приложение должно знать, что командная строка недоверена. Если этот флаг установлен, приложения должны отключить потенциально опасные функции, такие как макросы, скачанный контент и автоматическая печать. Этот флаг является необязательным. Приложения, вызывающие CreateProcess, рекомендуется задать этот флаг при запуске программы с ненадежными аргументами командной строки (например, предоставленными веб-содержимым), чтобы созданный процесс смог применить соответствующую политику.
Флаг STARTF_UNTRUSTEDSOURCE поддерживается начиная с Windows Vista, но он не определен в файлах заголовков пакета SDK до пакета SDK для Windows 10. Чтобы использовать флаг в версиях до 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 как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows XP [только классические приложения] |
минимальный поддерживаемый сервер | Windows Server 2003 [только классические приложения] |
заголовка | processthreadsapi.h (включая Windows.h в Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2) |