Condividi tramite


Struttura STARTUPINFOW (processthreadsapi.h)

Specifica la stazione della finestra, il desktop, gli handle standard e l'aspetto della finestra principale per un processo in fase di creazione.

Sintassi

typedef struct _STARTUPINFOW {
  DWORD  cb;
  LPWSTR lpReserved;
  LPWSTR lpDesktop;
  LPWSTR 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;
} STARTUPINFOW, *LPSTARTUPINFOW;

Membri

cb

Dimensione della struttura, in byte.

lpReserved

Riservato; deve essere NULL.

lpDesktop

Nome del desktop o del nome sia della stazione desktop che della finestra per questo processo. Una barra rovesciata nella stringa indica che la stringa include sia i nomi della stazione desktop che della finestra.

Per altre informazioni, vedere Connessione thread a undesktop.

lpTitle

Per i processi della console, questo è il titolo visualizzato nella barra del titolo se viene creata una nuova finestra della console. Se NULL, il nome del file eseguibile viene invece usato come titolo della finestra. Questo parametro deve essere NULL per i processi gui o console che non creano una nuova finestra della console.

dwX

Se dwFlags specifica STARTF_USEPOSITION, questo membro corrisponde all'offset x dell'angolo superiore sinistro di una finestra se viene creata una nuova finestra, in pixel. In caso contrario, questo membro viene ignorato.

L'offset si trova nell'angolo superiore sinistro dello schermo. Per i processi GUI, la posizione specificata viene usata la prima volta che il nuovo processo chiama CreateWindow per creare una finestra sovrapposta se il parametro x di CreateWindow è CW_USEDEFAULT.

dwY

Se dwFlags specifica STARTF_USEPOSITION, questo membro corrisponde all'offset y dell'angolo superiore sinistro di una finestra se viene creata una nuova finestra, in pixel. In caso contrario, questo membro viene ignorato.

L'offset si trova nell'angolo superiore sinistro dello schermo. Per i processi GUI, la posizione specificata viene usata la prima volta che il nuovo processo chiama CreateWindow per creare una finestra sovrapposta se il parametro y di CreateWindow è CW_USEDEFAULT.

dwXSize

Se dwFlags specifica STARTF_USESIZE, questo membro corrisponde alla larghezza della finestra se viene creata una nuova finestra, in pixel. In caso contrario, questo membro viene ignorato.

Per i processi GUI, viene usata solo la prima volta che il nuovo processo chiama CreateWindow per creare una finestra sovrapposta se il parametro nWidth di CreateWindow è CW_USEDEFAULT.

dwYSize

Se dwFlags specifica STARTF_USESIZE, questo membro corrisponde all'altezza della finestra se viene creata una nuova finestra, in pixel. In caso contrario, questo membro viene ignorato.

Per i processi GUI, viene usata solo la prima volta che il nuovo processo chiama CreateWindow per creare una finestra sovrapposta se il parametro nHeight di CreateWindow è CW_USEDEFAULT.

dwXCountChars

Se dwFlags specifica STARTF_USECOUNTCHARS, se viene creata una nuova finestra della console in un processo della console, questo membro specifica la larghezza del buffer dello schermo, nelle colonne di caratteri. In caso contrario, questo membro viene ignorato.

dwYCountChars

Se dwFlags specifica STARTF_USECOUNTCHARS, se viene creata una nuova finestra della console in un processo della console, questo membro specifica l'altezza del buffer dello schermo, nelle righe di caratteri. In caso contrario, questo membro viene ignorato.

dwFillAttribute

Se dwFlags specifica STARTF_USEFILLATTRIBUTE, questo membro corrisponde al testo iniziale e ai colori di sfondo se viene creata una nuova finestra della console in un'applicazione console. In caso contrario, questo membro viene ignorato.

Questo valore può essere qualsiasi combinazione dei valori seguenti: FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED, FOREGROUND_INTENSITY, BACKGROUND_BLUE, BACKGROUND_GREEN, BACKGROUND_RED e BACKGROUND_INTENSITY. Ad esempio, la combinazione di valori seguente produce testo rosso su uno sfondo bianco:

FOREGROUND_RED| BACKGROUND_RED| BACKGROUND_GREEN| BACKGROUND_BLUE

dwFlags

Campo di bit che determina se determinati MEMBRI STARTUPINFO vengono utilizzati quando il processo crea una finestra. Questo membro può essere uno o più dei valori seguenti.

Valore Significato
STARTF_FORCEONFEEDBACK
0x00000040
Indica che il cursore è in modalità feedback per due secondi dopo la chiamata di CreateProcess. Viene visualizzato il cursore Working in Background (vedere la scheda Puntatori nell'utilità Pannello di controllo mouse).

Se durante questi due secondi il processo effettua la prima chiamata GUI, il sistema fornisce cinque secondi al processo. Se durante questi cinque secondi il processo mostra una finestra, il sistema fornisce cinque secondi al processo per completare il disegno della finestra.

Il sistema disattiva il cursore di feedback dopo la prima chiamata a GetMessage, indipendentemente dal fatto che il processo sia di disegno.

STARTF_FORCEOFFFEEDBACK
0x00000080
Indica che il cursore di feedback è stato forzato durante l'avvio del processo. Viene visualizzato il cursore Normal Select.
STARTF_PREVENTPINNING
0x00002000
Indica che non è possibile aggiungere finestre create dal processo sulla barra delle applicazioni.

Questo flag deve essere combinato con STARTF_TITLEISAPPID.

STARTF_RUNFULLSCREEN
0x00000020
Indica che il processo deve essere eseguito in modalità schermo intero anziché in modalità finestra.

Questo flag è valido solo per le applicazioni console in esecuzione in un computer x86.

STARTF_TITLEISAPPID
0x00001000
Il membro lpTitle contiene un AppUserModelID. Questo identificatore controlla il modo in cui la barra delle applicazioni e menu Start presenta l'applicazione e consente di associarla ai collegamenti corretti e ai jump list. In genere, le applicazioni useranno il SetCurrentProcessExplicitAppUserModelID e Le funzioni GetCurrentProcessExplicitAppUserModelID anziché impostare questo flag. Per altre informazioni, vedere ID modello utente applicazione.

Se si usa STARTF_PREVENTPINNING, le finestre dell'applicazione non possono essere aggiunte sulla barra delle applicazioni. L'uso di qualsiasi proprietà della finestra correlata ad AppUserModelID dall'applicazione esegue l'override di questa impostazione solo per tale finestra.

Questo flag non può essere usato con STARTF_TITLEISLINKNAME.

STARTF_TITLEISLINKNAME
0x00000800
Il membro lpTitle contiene il percorso del file di collegamento (.lnk) richiamato dall'utente per avviare questo processo. Questa operazione viene in genere impostata dalla shell quando viene richiamato un file .lnk che punta all'applicazione avviata. La maggior parte delle applicazioni non dovrà impostare questo valore.

Questo flag non può essere usato con STARTF_TITLEISAPPID.

STARTF_UNTRUSTEDSOURCE
0x00008000
La riga di comando proviene da un'origine non attendibile. Per altre informazioni, vedere Osservazioni.
STARTF_USECOUNTCHARS
0x00000008
I membri dwXCountChars e dwYCountChars contengono informazioni aggiuntive.
STARTF_USEFILLATTRIBUTE
0x00000010
Il membro dwFillAttribute contiene informazioni aggiuntive.
STARTF_USEHOTKEY
0x00000200
Il membro hStdInput contiene informazioni aggiuntive.

Questo flag non può essere usato con STARTF_USESTDHANDLES.

STARTF_USEPOSITION
0x00000004
I membri dwX e dwY contengono informazioni aggiuntive.
STARTF_USESHOWWINDOW
0x00000001
Il membro wShowWindow contiene informazioni aggiuntive.
STARTF_USESIZE
0x00000002
I membri dwXSize e dwYSize contengono informazioni aggiuntive.
STARTF_USESTDHANDLES
0x00000100
I membri hStdInput, hStdOutpute hStdError contengono informazioni aggiuntive.

Se questo flag viene specificato quando si chiama una delle funzioni di creazione del processo, gli handle devono essere ereditabili e il bInheritHandles parametro deve essere impostato su TRUE. Per altre informazioni, vedere Gestire l'ereditarietà.

Se questo flag viene specificato quando si chiama la funzione GetStartupInfo , questi membri sono il valore handle specificato durante la creazione del processo o INVALID_HANDLE_VALUE.

Gli handle devono essere chiusi con CloseHandle quando non sono più necessari.

Questo flag non può essere usato con STARTF_USEHOTKEY.

wShowWindow

Se dwFlags specifica STARTF_USESHOWWINDOW, questo membro può essere uno qualsiasi dei valori che possono essere specificati nel parametro nCmdShow per la funzione ShowWindow, ad eccezione di SW_SHOWDEFAULT. In caso contrario, questo membro viene ignorato.

Per i processi GUI, la prima volta che viene chiamato ShowWindow, il relativo parametro nCmdShow viene ignorato wShowWindow specifica il valore predefinito. Nelle chiamate successive a ShowWindow, il membro wShowWindow viene usato se il parametro nCmdShow di ShowWindow è impostato su SW_SHOWDEFAULT.

cbReserved2

Riservato per l'uso da parte del runtime C; deve essere zero.

lpReserved2

Riservato per l'uso da parte del runtime C; deve essere NULL.

hStdInput

Se dwFlags specifica STARTF_USESTDHANDLES, questo membro è l'handle di input standard per il processo. Se non viene specificato STARTF_USESTDHANDLES, il valore predefinito per l'input standard è il buffer della tastiera.

Se dwFlags specifica STARTF_USEHOTKEY, questo membro specifica un valore di tasti di scelta rapida inviato come parametro wParam di un messaggio di WM_SETHOTKEY alla prima finestra di primo livello idonea creata dall'applicazione proprietaria del processo. Se la finestra viene creata con lo stile della finestra WS_POPUP, non è idonea a meno che non sia impostato anche lo stile della finestra estesa WS_EX_APPWINDOW. Per altre informazioni, vedere CreateWindowEx.

In caso contrario, questo membro viene ignorato.

hStdOutput

Se dwFlags specifica STARTF_USESTDHANDLES, questo membro è l'handle di output standard per il processo. In caso contrario, questo membro viene ignorato e il valore predefinito per l'output standard è il buffer della finestra della console.

Se un processo viene avviato dalla barra delle applicazioni o dalla jump list, il sistema imposta hStdOutput su un handle per il monitor che contiene la barra delle applicazioni o la jump list usata per avviare il processo. Per altre informazioni, vedere Osservazioni.Windows 7, Windows Server 2008 R2, Windows Vista, Windows Server 2008, Windows XP e Windows Server 2003: Questo comportamento è stato introdotto in Windows 8 e Windows Server 2012.

hStdError

Se dwFlags specifica STARTF_USESTDHANDLES, questo membro è l'handle di errore standard per il processo. In caso contrario, questo membro viene ignorato e il valore predefinito per l'errore standard è il buffer della finestra della console.

Osservazioni

Per i processi dell'interfaccia utente grafica (GUI), queste informazioni influiscono sulla prima finestra creata dalla funzione CreateWindow e visualizzata dalla funzione ShowWindow. Per i processi della console, queste informazioni influiscono sulla finestra della console se viene creata una nuova console per il processo. Un processo può usare la funzione GetStartupInfo per recuperare la struttura STARTUPINFO specificata al momento della creazione del processo.

Se viene avviato un processo GUI e non viene specificato alcun STARTF_FORCEONFEEDBACK o STARTF_FORCEOFFFEEDBACK, viene usato il cursore di feedback del processo. Un processo GUI è uno il cui sottosistema è specificato come "windows".

Se un processo viene avviato dalla barra delle applicazioni o dalla jump list, il sistema imposta GetStartupInfo per recuperare la struttura STARTUPINFO e verificare che sia impostato hStdOutput. In tal caso, usare GetMonitorInfo per verificare se hStdOutput è un handle di monitoraggio valido (HMONITOR). Il processo può quindi usare l'handle per posizionare le finestre.

Se viene specificato il flag STARTF_UNTRUSTEDSOURCE, l'applicazione deve tenere presente che la riga di comando non è attendibile. Se questo flag è impostato, le applicazioni devono disabilitare funzionalità potenzialmente pericolose, ad esempio macro, contenuto scaricato e stampa automatica. Questo flag è facoltativo. Le applicazioni che chiamano CreateProcess sono incoraggiate a impostare questo flag quando si avvia un programma con argomenti della riga di comando non attendibili ,ad esempio quelli forniti dal contenuto Web, in modo che il processo appena creato possa applicare i criteri appropriati.

Il flag STARTF_UNTRUSTEDSOURCE è supportato a partire da Windows Vista, ma non è definito nei file di intestazione dell'SDK prima di Windows 10 SDK. Per usare il flag nelle versioni precedenti a Windows 10, puoi definirlo manualmente nel programma.

Esempi

Nell'esempio di codice seguente viene illustrato l'uso di StartUpInfoW.

#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 );
}

Per altre informazioni su questo esempio, vedere Creazione di processi.

Nota

L'intestazione processthreadsapi.h definisce STARTUPINFO come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.

Fabbisogno

Requisito Valore
client minimo supportato Windows XP [solo app desktop]
server minimo supportato Windows Server 2003 [solo app desktop]
intestazione processthreadsapi.h (include Windows.h in Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)

Vedere anche

CreateProcess

CreateProcessAsUser

CreateProcessWithLogonW

CreateProcessWithTokenW

GetStartupInfo