Estructura STARTUPINFOA (processthreadsapi.h)

Especifica la estación de ventana, el escritorio, los identificadores estándar y la apariencia de la ventana principal de un proceso en el momento de la creación.

Sintaxis

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;

Miembros

cb

El tamaño de la estructura en bytes.

lpReserved

Reservados; debe ser NULL.

lpDesktop

El nombre del escritorio o el nombre de la estación de escritorio y ventana de este proceso. Una barra diagonal inversa en la cadena indica que la cadena incluye los nombres de estación de escritorio y ventana.

Para obtener más información, consulte Conexión de subprocesos a un escritorio.

lpTitle

Para los procesos de consola, este es el título que se muestra en la barra de título si se crea una nueva ventana de consola. Si es NULL, el nombre del archivo ejecutable se usa como título de la ventana en su lugar. Este parámetro debe ser NULL para los procesos de gui o consola que no crean una nueva ventana de consola.

dwX

Si dwFlags especifica STARTF_USEPOSITION, este miembro es el desplazamiento x de la esquina superior izquierda de una ventana si se crea una nueva ventana, en píxeles. De lo contrario, se omite este miembro.

El desplazamiento procede de la esquina superior izquierda de la pantalla. Para los procesos de GUI, la posición especificada se usa la primera vez que el nuevo proceso llama a CreateWindow para crear una ventana superpuesta si el parámetro x de CreateWindow es CW_USEDEFAULT.

dwY

Si dwFlags especifica STARTF_USEPOSITION, este miembro es el desplazamiento y de la esquina superior izquierda de una ventana si se crea una nueva ventana, en píxeles. De lo contrario, se omite este miembro.

El desplazamiento procede de la esquina superior izquierda de la pantalla. Para los procesos de GUI, la posición especificada se usa la primera vez que el nuevo proceso llama a CreateWindow para crear una ventana superpuesta si el parámetro y de CreateWindow es CW_USEDEFAULT.

dwXSize

Si dwFlags especifica STARTF_USESIZE, este miembro es el ancho de la ventana si se crea una nueva ventana, en píxeles. De lo contrario, se omite este miembro.

Para los procesos de GUI, se usa solo la primera vez que el nuevo proceso llama a CreateWindow para crear una ventana superpuesta si el parámetro nWidth de CreateWindow es CW_USEDEFAULT.

dwYSize

Si dwFlags especifica STARTF_USESIZE, este miembro es el alto de la ventana si se crea una nueva ventana, en píxeles. De lo contrario, se omite este miembro.

Para los procesos de GUI, se usa solo la primera vez que el nuevo proceso llama a CreateWindow para crear una ventana superpuesta si el parámetro nHeight de CreateWindow es CW_USEDEFAULT.

dwXCountChars

Si dwFlags especifica STARTF_USECOUNTCHARS, si se crea una nueva ventana de consola en un proceso de consola, este miembro especifica el ancho del búfer de pantalla, en columnas de caracteres. De lo contrario, se omite este miembro.

dwYCountChars

Si dwFlags especifica STARTF_USECOUNTCHARS, si se crea una nueva ventana de consola en un proceso de consola, este miembro especifica el alto del búfer de pantalla, en filas de caracteres. De lo contrario, se omite este miembro.

dwFillAttribute

Si dwFlags especifica STARTF_USEFILLATTRIBUTE, este miembro es el texto inicial y los colores de fondo si se crea una nueva ventana de consola en una aplicación de consola. De lo contrario, se omite este miembro.

Este valor puede ser cualquier combinación de los siguientes valores: FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED, FOREGROUND_INTENSITY, BACKGROUND_BLUE, BACKGROUND_GREEN, BACKGROUND_RED y BACKGROUND_INTENSITY. Por ejemplo, la siguiente combinación de valores genera texto rojo en un fondo blanco:

FOREGROUND_RED| BACKGROUND_RED| BACKGROUND_GREEN| BACKGROUND_BLUE

dwFlags

Campo de bits que determina si se usan determinados miembros STARTUPINFO cuando el proceso crea una ventana. Este miembro puede ser uno o varios de los valores siguientes.

Valor Significado
STARTF_FORCEONFEEDBACK
0x00000040
Indica que el cursor está en modo de comentarios durante dos segundos después de llamar a CreateProcess . Se muestra el cursor de Trabajando en segundo plano (vea la pestaña Punteros en la utilidad del panel de control Mouse).

Si durante esos dos segundos, el proceso realiza la primera llamada de GUI, el sistema proporciona cinco segundos más al proceso. Si durante esos cinco segundos, el proceso muestra una ventana, el sistema da cinco segundos más al proceso para finalizar el dibujo de la ventana.

El sistema desactiva el cursor de comentarios después de la primera llamada a GetMessage, independientemente de si el proceso está dibujando.

STARTF_FORCEOFFFEEDBACK
0x00000080
Indica que el cursor de comentarios el cursor se deja de forzar mientras el proceso se está iniciando. Se muestra el cursor de selección normal.
STARTF_PREVENTPINNING
0x00002000
Indica que las ventanas creadas por el proceso no se pueden anclar en la barra de tareas.

Esta marca debe combinarse con STARTF_TITLEISAPPID.

STARTF_RUNFULLSCREEN
0x00000020
Indica que el proceso se debe ejecutar en modo de pantalla completa, en lugar de en modo con ventana.

Esta marca solo es válida para las aplicaciones de consola que se ejecutan en un equipo x86.

STARTF_TITLEISAPPID
0x00001000
El miembro lpTitle contiene un AppUserModelID. Este identificador controla cómo la barra de tareas y el menú Inicio presentan la aplicación y permite asociarla con los accesos directos correctos y Jump Listas. Por lo general, las aplicaciones usarán las funciones SetCurrentProcessExplicitAppUserModelID y GetCurrentProcessExplicitAppUserModelID en lugar de establecer esta marca. Para obtener más información, consulte Identificadores de modelo de usuario de aplicación.

Si se usa STARTF_PREVENTPINNING, las ventanas de aplicación no se pueden anclar en la barra de tareas. El uso de cualquier propiedad de ventana relacionada con AppUserModelID por la aplicación invalida esta configuración solo para esa ventana.

Esta marca no se puede usar con STARTF_TITLEISLINKNAME.

STARTF_TITLEISLINKNAME
0x00000800
El miembro lpTitle contiene la ruta de acceso al archivo de acceso directo (.lnk) que el usuario invocó para iniciar este proceso. Normalmente, el shell establece esto cuando se invoca un archivo de .lnk que apunta a la aplicación iniciada. La mayoría de las aplicaciones no tendrán que establecer este valor.

Esta marca no se puede usar con STARTF_TITLEISAPPID.

STARTF_UNTRUSTEDSOURCE
0x00008000
La línea de comandos procede de un origen que no es de confianza. Para obtener más información, vea la sección Comentarios.
STARTF_USECOUNTCHARS
0x00000008
Los miembros dwXCountChars y dwYCountChars contienen información adicional.
STARTF_USEFILLATTRIBUTE
0x00000010
El miembro dwFillAttribute contiene información adicional.
STARTF_USEHOTKEY
0x00000200
El miembro hStdInput contiene información adicional.

Esta marca no se puede usar con STARTF_USESTDHANDLES.

STARTF_USEPOSITION
0x00000004
Los miembros dwX y dwY contienen información adicional.
STARTF_USESHOWWINDOW
0x00000001
El miembro wShowWindow contiene información adicional.
STARTF_USESIZE
0x00000002
Los miembros dwXSize y dwYSize contienen información adicional.
STARTF_USESTDHANDLES
0x00000100
Los miembros hStdInput, hStdOutput y hStdError contienen información adicional.

Si se especifica esta marca al llamar a una de las funciones de creación de procesos, los identificadores deben ser heredables y el parámetro bInheritHandles de la función debe establecerse en TRUE. Para obtener más información, vea Controlar la herencia.

Si se especifica esta marca al llamar a la función GetStartupInfo , estos miembros son el valor de identificador especificado durante la creación del proceso o INVALID_HANDLE_VALUE.

Los identificadores deben cerrarse con CloseHandle cuando ya no sean necesarios.

Esta marca no se puede usar con STARTF_USEHOTKEY.

wShowWindow

Si dwFlags especifica STARTF_USESHOWWINDOW, este miembro puede ser cualquiera de los valores que se pueden especificar en el parámetro nCmdShow para la función ShowWindow , excepto para SW_SHOWDEFAULT. De lo contrario, se omite este miembro.

Para los procesos de GUI, la primera vez que se llama a ShowWindow , su parámetro nCmdShow se omite wShowWindow especifica el valor predeterminado. En llamadas posteriores a ShowWindow, se usa el miembro wShowWindow si el parámetro nCmdShow de ShowWindow se establece en SW_SHOWDEFAULT.

cbReserved2

Reservado para su uso por el tiempo de ejecución de C; debe ser cero.

lpReserved2

Reservado para su uso por el tiempo de ejecución de C; debe ser NULL.

hStdInput

Si dwFlags especifica STARTF_USESTDHANDLES, este miembro es el identificador de entrada estándar para el proceso. Si no se especifica STARTF_USESTDHANDLES, el valor predeterminado para la entrada estándar es el búfer de teclado.

Si dwFlags especifica STARTF_USEHOTKEY, este miembro especifica un valor de tecla de acceso rápido que se envía como parámetro wParam de un mensaje de WM_SETHOTKEY a la primera ventana de nivel superior apta creada por la aplicación propietaria del proceso. Si la ventana se crea con el estilo de ventana WS_POPUP, no es apto a menos que también se establezca el estilo de ventana extendido WS_EX_APPWINDOW. Para obtener más información, vea CreateWindowEx.

De lo contrario, se omite este miembro.

hStdOutput

Si dwFlags especifica STARTF_USESTDHANDLES, este miembro es el identificador de salida estándar para el proceso. De lo contrario, este miembro se omite y el valor predeterminado para la salida estándar es el búfer de la ventana de consola.

Si se inicia un proceso desde la barra de tareas o la lista de accesos directos, el sistema establece hStdOutput en un identificador para el monitor que contiene la barra de tareas o la lista de accesos directos que se usa para iniciar el proceso. Para obtener más información, vea Comentarios. Windows 7, Windows Server 2008 R2, Windows Vista, Windows Server 2008, Windows XP y Windows Server 2003: Este comportamiento se introdujo en Windows 8 y Windows Server 2012.

hStdError

Si dwFlags especifica STARTF_USESTDHANDLES, este miembro es el identificador de error estándar para el proceso. De lo contrario, este miembro se omite y el valor predeterminado del error estándar es el búfer de la ventana de la consola.

Comentarios

Para los procesos de interfaz gráfica de usuario (GUI), esta información afecta a la primera ventana creada por la función CreateWindow y que muestra la función ShowWindow . Para los procesos de consola, esta información afecta a la ventana de consola si se crea una nueva consola para el proceso. Un proceso puede usar la función GetStartupInfo para recuperar la estructura STARTUPINFO especificada cuando se creó el proceso.

Si se está iniciando un proceso de GUI y no se especifican ni STARTF_FORCEONFEEDBACK ni STARTF_FORCEOFFFEEDBACK, se usa el cursor de comentarios del proceso. Un proceso de GUI es uno cuyo subsistema se especifica como "ventanas".

Si se inicia un proceso desde la barra de tareas o la lista de accesos directos, el sistema establece GetStartupInfo para recuperar la estructura STARTUPINFO y comprobar que hStdOutput está establecido. Si es así, use GetMonitorInfo para comprobar si hStdOutput es un identificador de monitor válido (HMONITOR). A continuación, el proceso puede usar el identificador para colocar sus ventanas.

Si se especifica la marca STARTF_UNTRUSTEDSOURCE , la aplicación debe tener en cuenta que la línea de comandos no es de confianza. Si se establece esta marca, las aplicaciones deben deshabilitar características potencialmente peligrosas, como macros, contenido descargado e impresión automática. Esta marca es opcional, pero se recomienda que las aplicaciones que llaman a CreateProcess establezcan esta marca al iniciar un programa con argumentos de línea de comandos que no son de confianza (como los proporcionados por el contenido web) para que el proceso recién creado pueda aplicar la directiva adecuada.

La marca de STARTF_UNTRUSTEDSOURCE se admite a partir de Windows Vista, pero no se define en los archivos de encabezado del SDK antes del SDK de Windows 10. Para usar la marca en versiones anteriores a Windows 10, puede definirla manualmente en el programa.

Ejemplos

En el ejemplo de código siguiente se muestra el 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 obtener más información sobre este ejemplo, vea Creating Processes.

Nota

El encabezado processthreadsapi.h define STARTUPINFO como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutro de codificación con código que no es neutral de codificación puede provocar discrepancias que dan lugar a errores de compilación o en tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Encabezado processthreadsapi.h (incluya Windows.h en Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)

Consulte también

CreateProcess

CreateProcessAsUser

CreateProcessWithLogonW

CreateProcessWithTokenW

GetStartupInfo