Compartilhar via


Estrutura STARTUPINFOA (processthreadsapi.h)

Especifica a estação de janela, a área de trabalho, os identificadores padrão e a aparência da janela principal para um processo no momento da criação.

Sintaxe

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;

Membros

cb

O tamanho da estrutura, em bytes.

lpReserved

Reservado; deve ser NULL.

lpDesktop

O nome da área de trabalho ou o nome da área de trabalho e da estação de janela para esse processo. Uma barra invertida na cadeia de caracteres indica que a cadeia de caracteres inclui os nomes da área de trabalho e da estação de janela.

Para obter mais informações, consulte Conexão de Thread com umda Área de Trabalho.

lpTitle

Para processos de console, esse é o título exibido na barra de título se uma nova janela do console for criada. Se NULL, o nome do arquivo executável será usado como o título da janela. Esse parâmetro deve ser NULL para processos de GUI ou console que não criam uma nova janela de console.

dwX

Se dwFlags especificar STARTF_USEPOSITION, esse membro será o deslocamento x do canto superior esquerdo de uma janela se uma nova janela for criada, em pixels. Caso contrário, esse membro será ignorado.

O deslocamento é do canto superior esquerdo da tela. Para processos de GUI, a posição especificada é usada na primeira vez que o novo processo chama CreateWindow para criar uma janela sobreposta se o parâmetro x de CreateWindow estiver CW_USEDEFAULT.

dwY

Se dwFlags especificar STARTF_USEPOSITION, esse membro será o deslocamento y do canto superior esquerdo de uma janela se uma nova janela for criada, em pixels. Caso contrário, esse membro será ignorado.

O deslocamento é do canto superior esquerdo da tela. Para processos de GUI, a posição especificada é usada na primeira vez que o novo processo chama CreateWindow para criar uma janela sobreposta se o parâmetro y de CreateWindow for CW_USEDEFAULT.

dwXSize

Se dwFlags especificar STARTF_USESIZE, esse membro será a largura da janela se uma nova janela for criada, em pixels. Caso contrário, esse membro será ignorado.

Para processos de GUI, isso é usado apenas na primeira vez que o novo processo chama CreateWindow para criar uma janela sobreposta se o parâmetro nWidth de CreateWindow estiver CW_USEDEFAULT.

dwYSize

Se dwFlags especificar STARTF_USESIZE, esse membro será a altura da janela se uma nova janela for criada, em pixels. Caso contrário, esse membro será ignorado.

Para processos de GUI, isso é usado apenas na primeira vez que o novo processo chama CreateWindow para criar uma janela sobreposta se o parâmetro nHeight de CreateWindow estiver CW_USEDEFAULT.

dwXCountChars

Se dwFlags especificar STARTF_USECOUNTCHARS, se uma nova janela de console for criada em um processo de console, esse membro especifica a largura do buffer de tela, em colunas de caracteres. Caso contrário, esse membro será ignorado.

dwYCountChars

Se dwFlags especificar STARTF_USECOUNTCHARS, se uma nova janela de console for criada em um processo de console, esse membro especifica a altura do buffer de tela, em linhas de caracteres. Caso contrário, esse membro será ignorado.

dwFillAttribute

Se dwFlags especificar STARTF_USEFILLATTRIBUTE, esse membro será o texto inicial e as cores da tela de fundo se uma nova janela de console for criada em um aplicativo de console. Caso contrário, esse membro será ignorado.

Esse valor pode ser qualquer combinação dos seguintes valores: FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED, FOREGROUND_INTENSITY, BACKGROUND_BLUE, BACKGROUND_GREEN, BACKGROUND_RED e BACKGROUND_INTENSITY. Por exemplo, a seguinte combinação de valores produz texto vermelho em um plano de fundo branco:

FOREGROUND_RED| BACKGROUND_RED| BACKGROUND_GREEN| BACKGROUND_BLUE

dwFlags

Um campo de bits que determina se determinados membros STARTUPINFO são usados quando o processo cria uma janela. Esse membro pode ser um ou mais dos valores a seguir.

Valor Significado
STARTF_FORCEONFEEDBACK
0x00000040
Indica que o cursor está no modo de comentários por dois segundos depois que CreateProcess é chamado. O cursor Trabalhando em Segundo Plano é exibido (consulte a guia Ponteiros no utilitário do painel de controle do Mouse).

Se durante esses dois segundos o processo fizer a primeira chamada de GUI, o sistema dará mais cinco segundos ao processo. Se durante esses cinco segundos o processo mostrar uma janela, o sistema dará mais cinco segundos ao processo para concluir o desenho da janela.

O sistema desativa o cursor de comentários após a primeira chamada para GetMessage, independentemente de o processo ser desenhado.

STARTF_FORCEOFFFEEDBACK
0x00000080
Indica que o cursor de comentários é forçado a sair enquanto o processo está sendo iniciado. O cursor Seleção Normal é exibido.
STARTF_PREVENTPINNING
0x00002000
Indica que as janelas criadas pelo processo não podem ser fixadas na barra de tarefas.

Esse sinalizador deve ser combinado com STARTF_TITLEISAPPID.

STARTF_RUNFULLSCREEN
0x00000020
Indica que o processo deve ser executado no modo de tela inteira, em vez de no modo de janela.

Esse sinalizador só é válido para aplicativos de console em execução em um computador x86.

STARTF_TITLEISAPPID
0x00001000
O membro lpTitle contém um AppUserModelID. Esse identificador controla como a barra de tarefas e menu Iniciar apresentar o aplicativo e permite que ele seja associado aos atalhos corretos e listas de salto. Em geral, os aplicativos usarão as funções SetCurrentProcessExplicitAppUserModelID e GetCurrentProcessExplicitAppUserModel ID em vez de definir esse sinalizador. Para obter mais informações, consulte IDs do modelo de usuário do aplicativo.

Se STARTF_PREVENTPINNING for usado, as janelas do aplicativo não poderão ser fixadas na barra de tarefas. O uso de quaisquer propriedades de janela relacionadas a AppUserModelID pelo aplicativo substitui essa configuração somente para essa janela.

Esse sinalizador não pode ser usado com STARTF_TITLEISLINKNAME.

STARTF_TITLEISLINKNAME
0x00000800
O membro lpTitle contém o caminho do arquivo de atalho (.lnk) que o usuário invocou para iniciar esse processo. Isso normalmente é definido pelo shell quando um arquivo .lnk apontando para o aplicativo iniciado é invocado. A maioria dos aplicativos não precisará definir esse valor.

Esse sinalizador não pode ser usado com STARTF_TITLEISAPPID.

STARTF_UNTRUSTEDSOURCE
0x00008000
A linha de comando veio de uma fonte não confiável. Para obter mais informações, consulte Comentários.
STARTF_USECOUNTCHARS
0x00000008
Os membros dwXCountChars e dwYCountChars contêm informações adicionais.
STARTF_USEFILLATTRIBUTE
0x00000010
O membro dwFillAttribute contém informações adicionais.
STARTF_USEHOTKEY
0x00000200
O membro hStdInput contém informações adicionais.

Esse sinalizador não pode ser usado com STARTF_USESTDHANDLES.

STARTF_USEPOSITION
0x00000004
Os membros dwX e dwY contêm informações adicionais.
STARTF_USESHOWWINDOW
0x00000001
O membro do wShowWindow contém informações adicionais.
STARTF_USESIZE
0x00000002
Os membros dwXSize e dwYSize contêm informações adicionais.
STARTF_USESTDHANDLES
0x00000100
Os membros hStdInput, hStdOutpute hStdError contêm informações adicionais.

Se esse sinalizador for especificado ao chamar uma das funções de criação do processo, os identificadores deverão ser herdáveis e o parâmetro bInheritHandles da função deverá ser definido como TRUE. Para obter mais informações, consulte manipularde herança.

Se esse sinalizador for especificado ao chamar a função GetStartupInfo, esses membros serão o valor do identificador especificado durante a criação do processo ou INVALID_HANDLE_VALUE.

Os identificadores devem ser fechados com CloseHandle quando não forem mais necessários.

Esse sinalizador não pode ser usado com STARTF_USEHOTKEY.

wShowWindow

Se dwFlags especificar STARTF_USESHOWWINDOW, esse membro poderá ser qualquer um dos valores que podem ser especificados no parâmetro nCmdShow para a função ShowWindow , exceto para SW_SHOWDEFAULT. Caso contrário, esse membro será ignorado.

Para processos de GUI, na primeira vez que ShowWindow é chamado, seu parâmetro nCmdShow é ignorado wShowWindow especifica o valor padrão. Nas chamadas subsequentes para ShowWindow, o membro do wShowWindow será usado se o parâmetro nCmdShow de ShowWindow estiver definido como SW_SHOWDEFAULT.

cbReserved2

Reservado para uso pelo tempo de execução C; deve ser zero.

lpReserved2

Reservado para uso pelo tempo de execução C; deve ser NULL.

hStdInput

Se dwFlags especificar STARTF_USESTDHANDLES, esse membro será o identificador de entrada padrão para o processo. Se STARTF_USESTDHANDLES não for especificado, o padrão para entrada padrão será o buffer de teclado.

Se dwFlags especificar STARTF_USEHOTKEY, esse membro especifica um valor de chave de acesso que é enviado como o parâmetro wParam de uma mensagem de WM_SETHOTKEY para a primeira janela de nível superior qualificada criada pelo aplicativo que possui o processo. Se a janela for criada com o estilo de janela WS_POPUP, ela não será qualificada, a menos que o estilo de janela estendida WS_EX_APPWINDOW também esteja definido. Para obter mais informações, consulte CreateWindowEx.

Caso contrário, esse membro será ignorado.

hStdOutput

Se dwFlags especificar STARTF_USESTDHANDLES, esse membro será o identificador de saída padrão para o processo. Caso contrário, esse membro será ignorado e o padrão para a saída padrão será o buffer da janela do console.

Se um processo for iniciado na barra de tarefas ou na lista de saltos, o sistema definirá hStdOutput para um identificador para o monitor que contém a barra de tarefas ou a lista de saltos usada para iniciar o processo. Para obter mais informações, consulte Comentários.Windows 7, Windows Server 2008 R2, Windows Vista, Windows Server 2008, Windows XP e Windows Server 2003: Esse comportamento foi introduzido no Windows 8 e no Windows Server 2012.

hStdError

Se dwFlags especificar STARTF_USESTDHANDLES, esse membro será o identificador de erro padrão para o processo. Caso contrário, esse membro será ignorado e o padrão para erro padrão é o buffer da janela do console.

Observações

Para processos de GUI (interface gráfica do usuário), essas informações afetam a primeira janela criada pela função CreateWindow e mostradas pela função ShowWindow. Para processos de console, essas informações afetarão a janela do console se um novo console for criado para o processo. Um processo pode usar a função GetStartupInfo para recuperar a estrutura STARTUPINFO especificada quando o processo foi criado.

Se um processo de GUI estiver sendo iniciado e nenhum STARTF_FORCEONFEEDBACK ou STARTF_FORCEOFFFEEDBACK for especificado, o cursor de comentários do processo será usado. Um processo de GUI é aquele cujo subsistema é especificado como "janelas".

Se um processo for iniciado na barra de tarefas ou na lista de saltos, o sistema definirá GetStartupInfo para recuperar a estrutura de STARTUPINFO e verificar se hStdOutput está definida. Nesse caso, use GetMonitorInfo para verificar se hStdOutput é um HMONITOR (identificador de monitor) válido. Em seguida, o processo pode usar o identificador para posicionar suas janelas.

Se o sinalizador STARTF_UNTRUSTEDSOURCE for especificado, o aplicativo deverá estar ciente de que a linha de comando não é confiável. Se esse sinalizador for definido, os aplicativos deverão desabilitar recursos potencialmente perigosos, como macros, conteúdo baixado e impressão automática. Esse sinalizador é opcional, mas os aplicativos que chamam CreateProcess são incentivados a definir esse sinalizador ao iniciar um programa com argumentos de linha de comando não confiáveis (como os fornecidos pelo conteúdo da Web) para que o processo recém-criado possa aplicar a política apropriada.

O sinalizador STARTF_UNTRUSTEDSOURCE tem suporte a partir do Windows Vista, mas não é definido nos arquivos de cabeçalho do SDK antes do SDK do Windows 10. Para usar o sinalizador em versões anteriores ao Windows 10, você pode defini-lo manualmente em seu programa.

Exemplos

O exemplo de código a seguir mostra o uso de 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 );
}

Para obter mais informações sobre este exemplo, consulte Criando processos.

Nota

O cabeçalho processthreadsapi.h define STARTUPINFO como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante do pré-processador UNICODE. A combinação do uso do alias neutro de codificação com código que não é neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Conventions for Function Prototypes.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows XP [somente aplicativos da área de trabalho]
servidor com suporte mínimo Windows Server 2003 [somente aplicativos da área de trabalho]
cabeçalho processthreadsapi.h (inclua Windows.h no Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)

Consulte também

CreateProcess

CreateProcessAsUser

CreateProcessWithLogonW

CreateProcessWithTokenW

GetStartupInfo