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


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

Ценность Значение
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 и dw Y содержат дополнительные сведения.
STARTF_USESHOWWINDOW
0x00000001
Элемент wShowWindow содержит дополнительные сведения.
STARTF_USESIZE
0x00000002
Элементы dwXSize 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 параметр nCmdShow игнорируется wShowWindow указывает значение по умолчанию. В последующих вызовах ShowWindowэлемент wShowWindow используется, если параметр nCmdShowshowWindow имеет значение 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 для получения структуры STARTUPINFO, указанной при создании процесса.

Если запускается процесс графического интерфейса и ни STARTF_FORCEONFEEDBACK, ни STARTF_FORCEOFFFEEDBACK не указан, используется курсор обратной связи процесса. Процесс графического интерфейса — это один из подсистем, подсистема которого указана как "windows".

Если процесс запускается с панели задач или списка переходов, системные наборы GetStartupInfo для получения структуры STARTUPINFO и убедитесь, что задан hStdOutput. Если это так, используйте GetMonitorInfo, чтобы проверить, является ли hStdOutput допустимым дескриптором монитора (HMONITOR). Затем процесс может использовать дескриптор для размещения окон.

Если указан флаг STARTF_UNTRUSTEDSOURCE, приложение должно знать, что командная строка недоверена. Если этот флаг установлен, приложения должны отключить потенциально опасные функции, такие как макросы, скачанный контент и автоматическая печать. Этот флаг является необязательным, но приложения, которые вызывают CreateProcess, рекомендуется задать этот флаг при запуске программы с ненадежными аргументами командной строки (например, предоставленными веб-содержимым), чтобы созданный процесс смог применить соответствующую политику.

Флаг STARTF_UNTRUSTEDSOURCE поддерживается начиная с Windows Vista, но он не определен в файлах заголовков пакета SDK до пакета SDK для Windows 10. Чтобы использовать флаг в версиях до 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