Condividi tramite


Funzione ShellExecuteExA (shellapi.h)

Esegue un'operazione su un file specificato.

Sintassi

BOOL ShellExecuteExA(
  [in, out] SHELLEXECUTEINFOA *pExecInfo
);

Parametri

[in, out] pExecInfo

Tipo: SHELLEXECUTEINFO*

Puntatore a una struttura SHELLEXECUTEINFO che contiene e riceve informazioni sull'applicazione in esecuzione.

Valore restituito

Tipo: bool

Restituisce TRUE in caso di esito positivo; in caso contrario, FALSE. Chiamare getLastError per informazioni estese sull'errore.

Osservazioni

Poiché ShellExecuteEx può delegare l'esecuzione alle estensioni shell (origini dati, gestori di menu di scelta rapida, implementazioni verbo) attivate tramite Component Object Model (COM), COM deve essere inizializzato prima di viene chiamato shellExecuteEx. Alcune estensioni della shell richiedono il tipo APARTMENT a thread singolo COM (STA). In tal caso, com deve essere inizializzato come illustrato di seguito:

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)

Esistono istanze in cui ShellExecuteEx non usa uno di questi tipi di estensione shell e tali istanze non richiedono l'inizializzazione di COM. Tuttavia, è consigliabile inizializzare sempre COM prima di usare questa funzione.

Quando le DLL vengono caricate nel processo, si acquisisce un blocco noto come blocco del caricatore . La funzione DllMain viene sempre eseguita nel blocco del caricatore. È importante non chiamare ShellExecuteEx mentre si mantiene un blocco del caricatore. Poiché ShellExecuteEx è estendibile, è possibile caricare il codice che non funziona correttamente in presenza di un blocco del caricatore, rischiando un deadlock e pertanto un thread non risponde.

Con più monitoraggi, se si specifica un HWND e si imposta il lpVerb membro della struttura SHELLEXECUTEINFO a cui punta lpExecInfo su "Properties", eventuali finestre create da ShellExecuteEx potrebbero non essere visualizzate nella posizione corretta.

Se la funzione ha esito positivo, imposta il membro hInstApp della struttura SHELLEXECUTEINFO su un valore maggiore di 32. Se la funzione ha esito negativo, hInstApp viene impostata sul valore di errore SE_ERR_XXX che indica meglio la causa dell'errore. Anche se hInstApp è dichiarato come HINSTANCE per la compatibilità con le applicazioni Windows a 16 bit, non è una vera HINSTANCE. Può essere eseguito il cast solo a un int e può essere confrontato solo con il valore 32 o i codici di errore SE_ERR_XXX.

I valori di errore SE_ERR_XXX vengono forniti per la compatibilità con ShellExecute. Per recuperare informazioni sugli errori più accurate, usare GetLastError. Può restituire uno dei valori seguenti.

Errore Descrizione
ERROR_FILE_NOT_FOUND Impossibile trovare il file specificato.
ERROR_PATH_NOT_FOUND Impossibile trovare il percorso specificato.
ERROR_DDE_FAIL Transazione DDE (Dynamic Data Exchange) non riuscita.
ERROR_NO_ASSOCIATION Nessuna applicazione associata all'estensione del nome file specificata.
ERROR_ACCESS_DENIED L'accesso al file specificato viene negato.
ERROR_DLL_NOT_FOUND Non è possibile trovare uno dei file di libreria necessari per eseguire l'applicazione.
ERROR_CANCELLED La funzione ha richiesto all'utente informazioni aggiuntive, ma l'utente ha annullato la richiesta.
ERROR_NOT_ENOUGH_MEMORY Memoria insufficiente per eseguire l'azione specificata.
ERROR_SHARING_VIOLATION Si è verificata una violazione di condivisione.
 

Apertura di elementi da un URL È possibile registrare l'applicazione per l'attivazione quando gli URL passati. È anche possibile specificare i protocolli supportati dall'applicazione. Per altre informazioni, vedi registrazione dell'applicazione .

Supporto della catena di siti A partire da Windows 8, è possibile fornire un puntatore della catena di siti alla funzione ShellExecuteEx per supportare l'attivazione degli elementi con i servizi di tale sito. Per altre informazioni, vedere Avvio di applicazioni (ShellExecute, ShellExecuteEx, SHELLEXECUTEINFO).

Nota

L'intestazione shellapi.h definisce ShellExecuteEx 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 2000 Server [solo app desktop]
piattaforma di destinazione Finestre
intestazione shellapi.h
libreria Shell32.lib
dll Shell32.dll (versione 3.51 o successiva)

Vedere anche

CoInitializeEx

IShellExecuteHook

avvio di applicazioni (ShellExecute, ShellExecuteEx, SHELLEXECUTEINFO)

ShellExecute