Структура STARTUPINFO используется функцией CreateProcess для определения свойств главного окна, если новое окно создаётся для нового процесса. Для процессов графического интерфейса пользователя (GUI), эта информация относится к первому окну, создаваемому функцией CreateProcess и показываемому функцией ShowWindow. Для консольных приложений эта информация относится к консольному окну, если таковое создаётся. Процесс может использовать функцию GetStartupInfo для получения структуры STARTUPINFO, указанной при создании процесса.
typedef
struct _STARTUPINFO { // si
DWORD
cb;
LPTSTR
lpReserved;
LPTSTR
lpDesktop;
LPTSTR
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;
} STARTUPINFO,
*LPSTARTUPINFO;
Размер структуры в байтах.
Зарезервировано. Устанавливается в NULL до передачи структуры в функцию CreateProcess.
Только в Windows NT: Указатель на строку с нольтерминатором, которая содержит либо только имя десктопа, либо и имя станции и десктопа для этого процесса. Обратный слэш в этой строке является показателем того, что строка включает в себя имена станции и десктопа. Иначе, строка интерпретируется как имя десктопа. Если параметр lpDesktop NULL, новый процесс наследует имена станции и десктопа родительского процесса.
Для консольных процессов это название указывается в заголовке нового консольного окна. Если же этот параметр NULL, то заголовком окна будет имя запускаемого файла. Этот параметр должен быть NULL для GUI-процессов и тех консольных процессов, которые не создают новых консольных окон.
Игнорируются, кроме тех случаев, когда dwFlags содержит флаг STARTF_USEPOSITION. Устанавливают смещения по осям X и Y, в пикселах, верхнего левого угла окна, если новое окно создаётся. Смещение отсчитывается относительно экрана. Для GUI-процессов указанная позиция используется только во время первого вызова процессом функции CreateWindow для создания перекрывающего окна, если параметр x функции CreateWindow равен CW_USEDEFAULT.
Игнорируются, кроме тех случаев, когда dwFlags содержит флаг STARTF_USESIZE. Задают ширину (dwXSize) и высоту (dwYSize), нового создаваемого окна. Для GUI-процессов указанные значения используются только во время первого вызова процессом функции CreateWindow для создания перекрывающего окна, если параметр nWidth функции CreateWindow равен CW_USEDEFAULT.
Игнорируются, кроме тех случаев, когда dwFlags содержит флаг STARTF_USECOUNTCHARS. Для консольных процессов, если создаётся консольное окно, dwXCountChars задаёт ширину экранного буфера в символьных столбцах, и dwYCountChars задаёт высоту экранного буфера в символьных строках. Эти значения игнорируются в GUI-процессах.
Игнорируется, кроме тех случаев, когда dwFlags содержит флаг STARTF_USEFILLATTRIBUTE. Задаёт начальные цвета текста и фона создаваемого консольного окна для консольного приложения. Эти значения игнорируются в GUI-процессах. Значения могут быть любой комбинацией следующих констант: FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED, FOREGROUND_INTENSITY, BACKGROUND_BLUE, BACKGROUND_GREEN, BACKGROUND_RED, and BACKGROUND_INTENSITY. Например, следующая комбинация значений задаёт красный цвет текста на белом фоне:
FOREGROUND_RED | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE
Это битовое поле определяет использование членов в структуре STARTUPINFO при создании процессом окна. Возможна любая комбинация следующих значений:
Значение |
Описание |
STARTF_USESHOWWINDOW |
Если не установлен, член wShowWindow игнорируется. |
STARTF_USEPOSITION |
Если не установлен, члены dwX и dwY игнорируются. |
STARTF_USESIZE |
|
STARTF_USECOUNTCHARS |
Если не установлен, члены dwXCountChars и dwYCountChars игнорируются. |
STARTF_USEFILLATTRIBUTE |
Если не установлен, член dwFillAttribute игнорируется. |
STARTF_FORCEONFEEDBACK |
Если установлен, то при вызове CreateProcess, курсор будет иметь вид фонового режима 2 секунды. Если в течение этого времени процесс выполнит первый вызов GUI, система даёт ещё 5 секунд процессу. Если в течение этого времени процесс показывает окно, система даёт ещё 5 секунд процессу для окончания прорисовки окна. Система убирает курсор фонового режима после первого вызова GetMessage, вне зависимости от того рисует ли процесс. Смотри более подробно в секции замечаний. |
STARTF_FORCEOFFFEEDBACK |
Если установлен, курсор показывается в нормальном виде при загрузке процесса. Смотри более подробно в секции замечаний. |
STARTF_USESTDHANDLES |
Если установлен, организуется стандартный ввод-вывод процесса, стандартный обработчик ошибок в дескрипторы задаваемые членами структуры hStdInput, hStdOutput, и hStdError. Для правильной работы необходимо, чтобы параметр функции CreateProcess fInheritHandles, был равен TRUE. Если не установлен, члены структуры hStdInput, hStdOutput, и hStdError игнорируются. |
Игнорируется, кроме тех случаев, когда dwFlags содержит флаг STARTF_USESHOWWINDOW. wShowWindow может быть равен любой из констант вида SW_константа определённых в WINUSER.H. Для GUI-процессов wShowWindow задаёт значение по умолчанию первого вызова функции ShowWindow. Параметр функции ShowWindow nCmdShow игнорируется. В последующих вызовах функции ShowWindow, член wShowWindow используется, если параметр функции ShowWindow nCmdShow установлен в SW_SHOWDEFAULT.
Зарезервирован; должен быть равен 0.
Зарезервирован; должен быть NULL.
Игнорируется, кроме тех случаев, когда dwFlags содержит флаг STARTF_USESTDHANDLES. Задаёт дескриптор, который будет использоваться как стандартный обработчик ввода процесса.
Игнорируется, кроме тех случаев, когда dwFlags содержит флаг STARTF_USESTDHANDLES. Задаёт дескриптор, который будет использоваться как стандартный обработчик вывода процесса.
Игнорируется, кроме тех случаев, когда dwFlags содержит флаг STARTF_USESTDHANDLES. Задаёт дескриптор, который будет использоваться как стандартный обработчик ошибок процесса.
Если GUI процесс запускается без указанных флагов STARTF_FORCEONFEEDBACK или STARTF_FORCEOFFFEEDBACK, используется курсор фонового режима. Подсистема GUI-процесса специфицируется как "windows."
CreateProcess, CreateWindow, GetMessage,
GetStartupInfo, PeekMessage, ShowWindow, WinMain