Función ShellExecuteExA (shellapi.h)
Realiza una operación en un archivo especificado.
Sintaxis
BOOL ShellExecuteExA(
[in, out] SHELLEXECUTEINFOA *pExecInfo
);
Parámetros
[in, out] pExecInfo
Tipo: SHELLEXECUTEINFO*
Puntero a una estructura SHELLEXECUTEINFO que contiene y recibe información sobre la aplicación que se está ejecutando.
Valor devuelto
Tipo: BOOL
Devuelve TRUE si se ejecuta correctamente; de lo contrario, FALSE. Llame a GetLastError para obtener información de error extendida.
Comentarios
Dado que ShellExecuteEx puede delegar la ejecución en extensiones de Shell (orígenes de datos, controladores de menús contextuales, implementaciones de verbo) que se activan mediante el modelo de objetos componentes (COM), se debe inicializar COM antes de llamar a ShellExecuteEx . Algunas extensiones de Shell requieren el tipo de apartamento de un solo subproceso COM (STA). En ese caso, COM debe inicializarse como se muestra aquí:
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)
Hay instancias en las que ShellExecuteEx no usa uno de estos tipos de extensión de Shell y esas instancias no requerirían que COM se inicializara en absoluto. Sin embargo, se recomienda inicializar siempre COM antes de usar esta función.
Cuando los archivos DLL se cargan en el proceso, se adquiere un bloqueo conocido como bloqueo del cargador. La función DllMain siempre se ejecuta bajo el bloqueo del cargador. Es importante que no llame a ShellExecuteEx mientras mantiene un bloqueo del cargador. Dado que ShellExecuteEx es extensible, puede cargar código que no funcione correctamente en presencia de un bloqueo del cargador, arriesgando un interbloqueo y, por lo tanto, un subproceso que no responde.
Con varios monitores, si especifica un HWND y establece el miembro lpVerb de la estructura SHELLEXECUTEINFO a la que apunta lpExecInfo en "Properties", es posible que las ventanas creadas por ShellExecuteEx no aparezcan en la posición correcta.
Si la función se ejecuta correctamente, establece el miembro hInstApp de la estructura SHELLEXECUTEINFO en un valor mayor que 32. Si se produce un error en la función, hInstApp se establece en el valor de error SE_ERR_XXX que indica mejor la causa del error. Aunque hInstApp se declara como HINSTANCE por compatibilidad con aplicaciones Windows de 16 bits, no es un verdadero HINSTANCE. Solo se puede convertir en un valor int y solo se puede comparar con el valor 32 o los códigos de error SE_ERR_XXX.
Los valores de error SE_ERR_XXX se proporcionan para la compatibilidad con ShellExecute. Para recuperar información de error más precisa, use GetLastError. Puede devolver uno de los siguientes valores.
Error | Descripción |
---|---|
ERROR_FILE_NOT_FOUND | No se encontró el archivo especificado. |
ERROR_PATH_NOT_FOUND | No se encontró la ruta de acceso especificada. |
ERROR_DDE_FAIL | Error en la transacción de Intercambio de datos dinámicos (DDE). |
ERROR_NO_ASSOCIATION | No hay ninguna aplicación asociada a la extensión de nombre de archivo especificada. |
ERROR_ACCESS_DENIED | Se deniega el acceso al archivo especificado. |
ERROR_DLL_NOT_FOUND | No se encuentra uno de los archivos de biblioteca necesarios para ejecutar la aplicación. |
ERROR_CANCELLED | La función solicitó al usuario información adicional, pero el usuario canceló la solicitud. |
ERROR_NOT_ENOUGH_MEMORY | No hay suficiente memoria para realizar la acción especificada. |
ERROR_SHARING_VIOLATION | Se ha producido una infracción de uso compartido. |
Apertura de elementos desde una dirección URL Puede registrar la aplicación para que se active cuando se pasen direcciones URL. También puede especificar qué protocolos admite la aplicación. Consulte Registro de aplicaciones para obtener más información.
Compatibilidad con la cadena de sitios A partir de Windows 8, puedes proporcionar un puntero de cadena de sitio a la función ShellExecuteEx para admitir la activación de elementos con servicios de ese sitio. Vea Iniciar aplicaciones (ShellExecute, ShellExecuteEx, SHELLEXECUTEINFO) para obtener más información.
Nota:
El encabezado shellapi.h define ShellExecuteEx 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
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows 2000 Server [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | shellapi.h |
Library | Shell32.lib |
Archivo DLL | Shell32.dll (versión 3.51 o posterior) |
Consulte también
Iniciar aplicaciones (ShellExecute, ShellExecuteEx, SHELLEXECUTEINFO)