Структура STARTUPINFOA (processthreadsapi.h)
Указывает станцию окон, рабочий стол, стандартные дескрипторы и внешний вид окна main для процесса во время создания.
Синтаксис
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, в качестве заголовка окна используется имя исполняемого файла. Этот параметр должен иметь значение NULL для графических интерфейсов или консольных процессов, которые не создают новое окно консоли.
dwX
Если dwFlags указывает STARTF_USEPOSITION, этот элемент является смещением x верхнего левого угла окна при создании нового окна в пикселях. В противном случае этот элемент игнорируется.
Смещение находится в левом верхнем углу экрана. Для процессов графического пользовательского интерфейса указанная позиция используется при первом вызове createWindow новым процессом CreateWindow для создания перекрывающегося окна, если параметр xэлемента CreateWindow имеет CW_USEDEFAULT.
dwY
Если dwFlags указывает STARTF_USEPOSITION, этот элемент является смещением по Y верхнего левого угла окна при создании нового окна в пикселях. В противном случае этот элемент игнорируется.
Смещение находится в левом верхнем углу экрана. Для процессов графического пользовательского интерфейса указанная позиция используется при первом вызове createWindow новым процессом CreateWindow для создания перекрывающегося окна, если параметр ycreateWindow имеет CW_USEDEFAULT.
dwXSize
Если dwFlags указывает STARTF_USESIZE, этот элемент представляет собой ширину окна при создании нового окна в пикселях. В противном случае этот элемент игнорируется.
Для процессов графического интерфейса этот параметр используется только при первом вызове createWindow новым процессом для создания перекрывающегося окна, если параметр nWidthэлемента CreateWindow CW_USEDEFAULT.
dwYSize
Если dwFlags указывает STARTF_USESIZE, этот элемент будет высотой окна при создании нового окна в пикселях. В противном случае этот элемент игнорируется.
Для процессов графического интерфейса этот параметр используется только при первом вызове createWindow новым процессом для создания перекрывающегося окна, если параметр nHeightэлемента CreateWindow 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. |
|
Член 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, этот член может быть любым из значений, которые можно указать в параметре nCmdShow для функции ShowWindow , за исключением SW_SHOWDEFAULT. В противном случае этот элемент игнорируется.
Для процессов с графическим интерфейсом при первом вызове ShowWindow параметр nCmdShow игнорируется wShowWindow задает значение по умолчанию. В последующих вызовах ShowWindow член wShowWindow используется, если параметру nCmdShowэлемента ShowWindow присвоено значение SW_SHOWDEFAULT.
cbReserved2
Зарезервировано для использования во время выполнения C; значение должно быть равно нулю.
lpReserved2
Зарезервировано для использования во время выполнения C; значение должно иметь значение NULL.
hStdInput
Если dwFlags указывает STARTF_USESTDHANDLES, этот элемент является стандартным дескриптором входных данных для процесса. Если STARTF_USESTDHANDLES не указан, по умолчанию для стандартного ввода используется буфер клавиатуры.
Если dwFlags указывает STARTF_USEHOTKEY, этот член задает значение горячей клавиши, которое отправляется в качестве параметра wParamWM_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, этот член является стандартным дескриптором ошибок для процесса. В противном случае этот элемент игнорируется, а стандартной ошибкой по умолчанию является буфер окна консоли.
Комментарии
Для процессов графического пользовательского интерфейса эти сведения влияют на первое окно, созданное функцией CreateWindow и отображаемое функцией ShowWindow . Для консольных процессов эти сведения влияют на окно консоли, если для процесса создается новая консоль. Процесс может использовать функцию GetStartupInfo для получения структуры STARTUPINFO , указанной при создании процесса.
Если запускается процесс графического пользовательского интерфейса и не указан ни STARTF_FORCEONFEEDBACK, ни STARTF_FORCEOFFFEEDBACK, используется курсор обратной связи процесса. Процесс графического пользовательского интерфейса — это процесс, подсистема которого указана как "окна".
Если процесс запускается на панели задач или в списке переходов, система задает getStartupInfo для получения структуры STARTUPINFO и проверка, что задано значение hStdOutput. Если это так, используйте GetMonitorInfo, чтобы проверка, является ли hStdOutput допустимым дескриптором монитора (HMONITOR). Затем процесс может использовать дескриптор для размещения окон.
Если указан флаг STARTF_UNTRUSTEDSOURCE , приложение должно знать, что командная строка не является доверенной. Если этот флаг установлен, приложения должны отключить потенциально опасные функции, такие как макросы, скачаемое содержимое и автоматическая печать. Этот флаг необязателен, но приложениям, вызывающим CreateProcess , рекомендуется устанавливать этот флаг при запуске программы с недоверенными аргументами командной строки (например, предоставленными веб-содержимым), чтобы созданный процесс смог применить соответствующую политику.
Флаг STARTF_UNTRUSTEDSOURCE поддерживается начиная с Windows Vista, но он не определен в файлах заголовков пакета SDK до Windows 10 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 как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Верхняя часть | processthreadsapi.h (включая Windows.h в Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2) |