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이면 실행 파일의 이름이 대신 창 제목으로 사용됩니다. 이 매개 변수는 새 콘솔 창을 만들지 않는 GUI 또는 콘솔 프로세스의 경우 NULL이어야 합니다.

dwX

dwFlags가 STARTF_USEPOSITION 지정하는 경우 이 멤버는 새 창이 만들어진 경우 창의 왼쪽 위 모서리에 있는 x 오프셋(픽셀)입니다. 그렇지 않으면 이 멤버는 무시됩니다.

오프셋은 화면의 왼쪽 위 모서리에서 가져옵니다. GUI 프로세스의 경우 새 프로세스가 CreateWindow를 처음 호출하여 CreateWindowx 매개 변수가 CW_USEDEFAULT 경우 겹치는 창을 만들 때 지정된 위치가 사용됩니다.

dwY

dwFlags가 STARTF_USEPOSITION 지정하는 경우 이 멤버는 새 창이 만들어진 경우 창의 왼쪽 위 모서리에 있는 y 오프셋(픽셀)입니다. 그렇지 않으면 이 멤버는 무시됩니다.

오프셋은 화면의 왼쪽 위 모서리에서 가져옵니다. GUI 프로세스의 경우 새 프로세스가 CreateWindow를 처음 호출하여 CreateWindowy 매개 변수가 CW_USEDEFAULT 경우 겹치는 창을 만들 때 지정된 위치가 사용됩니다.

dwXSize

dwFlags가 STARTF_USESIZE 지정하는 경우 새 창이 만들어지면 이 멤버는 창의 너비(픽셀)입니다. 그렇지 않으면 이 멤버는 무시됩니다.

GUI 프로세스의 경우 새 프로세스가 CreateWindow를 처음 호출하여 CreateWindownWidth 매개 변수가 CW_USEDEFAULT 경우 겹치는 창을 만들 때만 사용됩니다.

dwYSize

dwFlags가 STARTF_USESIZE 지정하는 경우 새 창이 만들어지면 이 멤버는 창의 높이(픽셀)입니다. 그렇지 않으면 이 멤버는 무시됩니다.

GUI 프로세스의 경우 새 프로세스가 CreateWindow를 처음 호출하여 CreateWindownHeight 매개 변수가 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가 호출된 후 2초 동안 커서가 피드백 모드에 있음을 나타냅니다. 백그라운드에서 작업 커서가 표시됩니다(마우스 제어판 유틸리티의 포인터 탭 참조).

이 2초 동안 프로세스가 첫 번째 GUI 호출을 수행하는 경우 시스템은 프로세스에 5초를 더 제공합니다. 이 5초 동안 프로세스에 창이 표시되면 시스템은 프로세스에 5초 더 주어 창 그리기를 완료합니다.

시스템은 프로세스가 그리는지 여부에 관계없이 GetMessage에 대한 첫 번째 호출 후 피드백 커서를 끕니다.

STARTF_FORCEOFFFEEDBACK
0x00000080
프로세스가 시작되는 동안 피드백 커서가 강제로 꺼져 있음을 나타냅니다. 일반 선택 커서가 표시됩니다.
STARTF_PREVENTPINNING
0x00002000
프로세스에서 만든 창을 작업 표시줄에 고정할 수 없음을 나타냅니다.

이 플래그는 STARTF_TITLEISAPPID 결합해야 합니다.

STARTF_RUNFULLSCREEN
0x00000020
프로세스가 창 모드가 아닌 전체 화면 모드로 실행되어야 했음을 나타냅니다.

이 플래그는 x86 컴퓨터에서 실행되는 콘솔 애플리케이션에만 유효합니다.

STARTF_TITLEISAPPID
0x00001000
lpTitle 멤버에는 AppUserModelID가 포함되어 있습니다. 이 식별자는 작업 표시줄 및 시작 메뉴가 애플리케이션을 표시하는 방법을 제어하고 올바른 바로 가기 및 점프 Lists 연결할 수 있도록 합니다. 일반적으로 애플리케이션은 이 플래그를 설정하는 대신 SetCurrentProcessExplicitAppUserModelIDGetCurrentProcessExplicitAppUserModelID 함수를 사용합니다. 자세한 내용은 애플리케이션 사용자 모델 ID를 참조하세요.

STARTF_PREVENTPINNING 사용하는 경우 애플리케이션 창을 작업 표시줄에 고정할 수 없습니다. 애플리케이션에서 AppUserModelID 관련 창 속성을 사용하면 해당 창에 대해서만 이 설정이 재정의됩니다.

이 플래그는 STARTF_TITLEISLINKNAME 사용할 수 없습니다.

STARTF_TITLEISLINKNAME
0x00000800
lpTitle 멤버에는 사용자가 이 프로세스를 시작하기 위해 호출한 바로 가기 파일(.lnk)의 경로가 포함됩니다. 이는 일반적으로 시작된 애플리케이션을 가리키는 .lnk 파일이 호출될 때 셸에 의해 설정됩니다. 대부분의 애플리케이션은 이 값을 설정할 필요가 없습니다.

이 플래그는 STARTF_TITLEISAPPID 사용할 수 없습니다.

STARTF_UNTRUSTEDSOURCE
0x00008000
명령줄은 신뢰할 수 없는 원본에서 제공되었습니다. 자세한 내용은 설명 부분을 참조하세요.
STARTF_USECOUNTCHARS
0x00000008
dwXCountCharsdwYCountChars 멤버에는 추가 정보가 포함됩니다.
STARTF_USEFILLATTRIBUTE
0x00000010
dwFillAttribute 멤버에는 추가 정보가 포함됩니다.
STARTF_USEHOTKEY
0x00000200
hStdInput 멤버에는 추가 정보가 포함됩니다.

이 플래그는 STARTF_USESTDHANDLES 사용할 수 없습니다.

STARTF_USEPOSITION
0x00000004
dwXdwY 멤버에는 추가 정보가 포함됩니다.
STARTF_USESHOWWINDOW
0x00000001
wShowWindow 멤버에는 추가 정보가 포함되어 있습니다.
STARTF_USESIZE
0x00000002
dwXSizedwYSize 멤버에는 추가 정보가 포함되어 있습니다.
STARTF_USESTDHANDLES
0x00000100
hStdInput, hStdOutputhStdError 멤버에는 추가 정보가 포함되어 있습니다.

프로세스 만들기 함수 중 하나를 호출할 때 이 플래그를 지정하는 경우 핸들을 상속할 수 있어야 하며 함수의 bInheritHandles 매개 변수를 TRUE로 설정해야 합니다. 자세한 내용은 상속 처리를 참조하세요.

GetStartupInfo 함수를 호출할 때 이 플래그를 지정하는 경우 이러한 멤버는 프로세스를 만드는 동안 지정된 핸들 값이거나 INVALID_HANDLE_VALUE.

핸들은 더 이상 필요하지 않은 경우 CloseHandle 을 사용하여 닫아야 합니다.

이 플래그는 STARTF_USEHOTKEY 사용할 수 없습니다.

wShowWindow

dwFlags가 STARTF_USESHOWWINDOW 지정하는 경우 이 멤버는 SW_SHOWDEFAULT 제외하고 ShowWindow 함수에 대한 nCmdShow 매개 변수에 지정할 수 있는 값일 수 있습니다. 그렇지 않으면 이 멤버는 무시됩니다.

GUI 프로세스의 경우 ShowWindow 가 처음 호출될 때 nCmdShow 매개 변수는 무시됩니다 . wShowWindow 는 기본값을 지정합니다. ShowWindow에 대한 후속 호출에서는 ShowWindownCmdShow 매개 변수가 SW_SHOWDEFAULT 설정된 경우 wShowWindow 멤버가 사용됩니다.

cbReserved2

C 런타임에서 사용하도록 예약됨; 0이어야 합니다.

lpReserved2

C 런타임에서 사용하도록 예약됨; 은 NULL이어야 합니다.

hStdInput

dwFlags가 STARTF_USESTDHANDLES 지정하는 경우 이 멤버는 프로세스의 표준 입력 핸들입니다. STARTF_USESTDHANDLES 지정하지 않으면 표준 입력의 기본값은 키보드 버퍼입니다.

dwFlags가 STARTF_USEHOTKEY 지정하는 경우 이 멤버는 프로세스를 소유하는 애플리케이션에서 만든 첫 번째 적격 최상위 창에 WM_SETHOTKEY 메시지의 wParam 매개 변수로 전송되는 바로 가기 키 값을 지정합니다. 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 구조를 검색할 수 있습니다.

GUI 프로세스가 시작되고 STARTF_FORCEONFEEDBACK 또는 STARTF_FORCEOFFFEEDBACK 지정되지 않은 경우 프로세스 피드백 커서가 사용됩니다. GUI 프로세스는 하위 시스템이 "windows"로 지정된 프로세스입니다.

작업 표시줄 또는 점프 목록에서 프로세스가 시작되면 시스템은 GetStartupInfo를 설정하여 STARTUPINFO 구조를 검색하고 hStdOutput이 설정된 검사. 그렇다면 GetMonitorInfo를 사용하여 hStdOutput이 HMONITOR(유효한 모니터 핸들)인지 여부를 검사. 그런 다음 프로세스는 핸들을 사용하여 창을 배치할 수 있습니다.

STARTF_UNTRUSTEDSOURCE 플래그를 지정하면 애플리케이션은 명령줄이 신뢰할 수 없다는 것을 알고 있어야 합니다. 이 플래그가 설정된 경우 애플리케이션은 매크로, 다운로드한 콘텐츠 및 자동 인쇄와 같은 잠재적으로 위험한 기능을 사용하지 않도록 설정해야 합니다. 이 플래그는 선택 사항이지만 새로 만든 프로세스가 적절한 정책을 적용할 수 있도록 신뢰할 수 없는 명령줄 인수(예: 웹 콘텐츠에서 제공하는 인수)를 사용하여 프로그램을 시작할 때 CreateProcess 를 호출하는 애플리케이션은 이 플래그를 설정하는 것이 좋습니다.

STARTF_UNTRUSTEDSOURCE 플래그는 Windows Vista부터 지원되지만 Windows 10 SDK 이전의 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 Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2의 Windows.h 포함)

추가 정보

CreateProcess

CreateProcessAsUser

CreateProcessWithLogonW

CreateProcessWithTokenW

GetStartupInfo