Поделиться через


Структура 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 , когда процесс создает окно. Этот элемент может быть одним или несколькими из следующих значений.

Значение Значение
STARTF_FORCEONFEEDBACK
0x00000040
Указывает, что курсор находится в режиме обратной связи в течение двух секунд после вызова CreateProcess . Отображается курсор, работающий в фоне (см. вкладку указателей в программе консоли управления мышью).

Если в течение этих двух секунд процесс выполняет первый вызов графического интерфейса пользователя, система предоставляет процессу еще пять секунд. Если в течение этих пяти секунд в процессе отображается окно, система дает еще пять секунд процессу, чтобы завершить рисование окна.

Система отключает курсор обратной связи после первого вызова GetMessage, независимо от того, является ли процесс рисованием.

STARTF_FORCEOFFFEEDBACK
0x00000080
Указывает, что курсор отзыва выключен, пока процесс запускается. Отображается обычный курсор выделения.
STARTF_PREVENTPINNING
0x00002000
Указывает, что все окна, созданные процессом, не могут быть закреплены на панели задач.

Этот флаг должен быть объединён с STARTF_TITLEISAPPID.

STARTF_RUNFULLSCREEN
0x00000020
Указывает, что процесс должен быть выполнен в полноэкранном режиме, а не в оконного режиме.

Этот флаг действителен только для консольных приложений, работающих на компьютере x86.

STARTF_TITLEISAPPID
0x00001000
Член lpTitle содержит Идентификатор AppUserModelID. Этот идентификатор определяет, как панель задач и меню "Пуск" представляют приложение, и позволяет связать его с правильными ярлыками и Списки перехода. Как правило, вместо установки этого флага приложения используют функции SetCurrentProcessExplicitAppUserModelID и GetCurrentProcessExplicitAppUserModelID . Дополнительные сведения см. в разделе Идентификаторы пользовательских моделей приложений.

Если используется STARTF_PREVENTPINNING, окна приложений нельзя закрепить на панели задач. Использование любых свойств окна, связанных с AppUserModelID, приложением переопределяет этот параметр только для этого окна.

Этот флаг нельзя использовать с STARTF_TITLEISLINKNAME.

STARTF_TITLEISLINKNAME
0x00000800
Элемент lpTitle содержит путь к файлу ярлыка (.lnk), который пользователь вызвал для запуска этого процесса. Обычно это задается оболочкой при вызове файла .lnk, указывающего на запущенное приложение. Большинству приложений не нужно задавать это значение.

Этот флаг нельзя использовать с STARTF_TITLEISAPPID.

STARTF_UNTRUSTEDSOURCE
0x00008000
Командная строка поступила из ненадежного источника. Дополнительные сведения см. в подразделе "Примечания".
STARTF_USECOUNTCHARS
0x00000008
Члены dwXCountChars и dwYCountChars содержат дополнительные сведения.
STARTF_USEFILLATTRIBUTE
0x00000010
Член dwFillAttribute содержит дополнительные сведения.
STARTF_USEHOTKEY
0x00000200
Член hStdInput содержит дополнительные сведения.

Этот флаг нельзя использовать с STARTF_USESTDHANDLES.

STARTF_USEPOSITION
0x00000004
Члены dwX и dwY содержат дополнительные сведения.
STARTF_USESHOWWINDOW
0x00000001
Элемент wShowWindow содержит дополнительные сведения.
STARTF_USESIZE
0x00000002
Члены dwXSize и dwYSize содержат дополнительные сведения.
STARTF_USESTDHANDLES
0x00000100
Члены 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)

См. также раздел

CreateProcess

CreateProcessAsUser

CreateProcessWithLogonW

CreateProcessWithTokenW

GetStartupInfo