La función del API ShellExecute sirve para ejecutar un programa, imprimir un archivo, ejecutar un acceso directo, la aplicación asociada a un fichero, abrir una ventana del explorer de archivos, etc. Es decir, es como hacer doble click sobre un archivo en el Explorador de Archivos.
Declaramos la función :
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Y para usarla simplemente :
dim res as long
res = ShellExecute(Me.hwnd, "Open", "c:\documento.doc","", "", 1)
Los parámetros de la función son los siguientes :
HINSTANCE ShellExecute(
HWND hwnd, // handle de la ventana padre
LPCTSTR lpOperation, // puntero a string que especifica la operación a realizar
LPCTSTR lpFile, // puntero a string con el nombre del fichero o directorio
LPCTSTR lpParameters, // puntero a string con los parámetros del fich.ejecutable
LPCTSTR lpDirectory, // puntero a string que especifica el directorio por defecto
INT nShowCmd // cómo se muestra el fichero cuando se abre
);
PARAMETROS
hwnd
Especifica la ventana padre. Esta ventana recive los MessageBox que produzca
la aplicación. Por ejemplo, una aplicación puede reportar un error
produciendo un MessageBox.
lpOperation
Puntero a un "null-terminated" string que especifica la operación a
realizar. Las operaciones válidas son :
"open" : La función abre el fichero especificado por lpFile. El fichero
puede ser un fichero ejecutable, un documento o un directorio para abrir.
"print" : La función imprimirá el fichero especificado en lpFile. El fichero
debe ser un documento. Si el fichero es un ejecutable la función lo abre
como si se hubiera especificado "open".
"explore" : La función "explorará" el directorio especificado en lpFile.
"find" : Aparece el diálogo "Buscar archivos". Podemos especificar en el
parámetro lpFile el directorio a partir del cual queremos buscar.
El parámetro lpOperation puede ser NULL. En este caso la función abre el
fichero especificado en lpFile.
lpFile
Puntero a un "null-terminated" string que especifica el fichero a abrir o
imprimir o el directorio a abrir o explorar. La función puede abrir un
fichero ejecutable o un documento pero sólo puede imprimir un documento.
lpParameters
Si lpFile especifica un fichero ejecutable, lpParameters es un puntero a un
"null-terminated" string que indica los parámetros que deben ser pasados a
la aplicación. Si lpFile es un documento, lpParameters debe ser NULL.
lpDirectory
Puntero a un "null-terminated" string que indica el directorio por defecto.
nShowCmd
Si lpFile es un fichero ejecutable, nShowCmd indica cómo se mostrará la
aplicación cuando se abra. Este parámetro puede tener los siguientes valores
:
SW_HIDE: Oculta la ventana y activa otra ventana.
SW_MAXIMIZE : Maximiza la ventana.
SW_MINIMIZE : Minimiza la ventana y activa la siguiente.
SW_RESTORE : Activa y muestra la ventana. Si la ventana está minimizada o maximizada, Windows la restaura a sus originales tamaño y posición. Una aplicación debe especificar esta opción cuando restaura una ventana minimizada.
SW_SHOW : Activa la ventana y la muestra con su posición y tamaño actuales.
SW_SHOWDEFAULT : Da valor al "show state" basado en el flag SW_ especificado en la estructura STARTUPINFO pasada a la función CreateProcess por el programa que arrancó la aplicación. Una aplicación debe llamar a ShowWindow con este flag para dar valor al estado inicial de su ventana principal.
SW_SHOWMAXIMIZED : Activa la ventana y la maximiza.window.
SW_SHOWMINIMIZED : Activa la ventana y la minimiza.
SW_SHOWMINNOACTIVE : Muestra la ventana minimizada. La ventana activa permanece activa.
SW_SHOWNA : Muestra la ventana en su estado actual. La ventana activa permanece activa.
SW_SHOWNOACTIVATE : Muestra la ventana en sus más recientes tamaño y posición. La ventana activa permanece activa
SW_SHOWNORMAL : Activa y muestra una ventana. Si la ventana estaba minimizada o maximizada, windows la restaura a su tamaño y posición originales. Una aplicaciñón debe especificar este flag cuando muestra una ventana por primera vez.
Si lpFile es un documento, nShowCmd debe ser cero.
VALORES DEVUELTOS
Si la función va bien, el valor devuelto es el "instance handle" de la aplicación lanzada, o el handle de una aplicación servidora de DDE.
Si la función falla, el valor devuelto es un error menor o igual que 32 :
0 : Falta memoria o reursos.
ERROR_FILE_NOT_FOUND : Fichero no encontrado
ERROR_PATH_NOT_FOUND : Directorio no encontrado
ERROR_BAD_FORMAT : Fichero .EXE inválido
SE_ERR_ACCESSDENIED : Acceso denegado
SE_ERR_ASSOCINCOMPLETE : La asociación del fichero es inválida o incompleta
SE_ERR_DDEBUSY : La opreación DDE no puede ser completada porque se está procesando otra operación DDE
SE_ERR_DDEFAIL : La operación DDE falló
SE_ERR_DDETIMEOUT : Time out en la operación DDE
SE_ERR_DLLNOTFOUND : Dll no encontrada
SE_ERR_FNF : Fichero no encontrado
SE_ERR_NOASSOC : No hay aplicación asociada con la extensión dada
SE_ERR_OOM : No hay memoria suficiente para completar la operación
SE_ERR_PNF El camino especificado no fue encontrado
SE_ERR_SHARE Violación de compartición
COMENTARIOS
El fichero especificado por el parámetro lpFile puede ser un archivo de documento o un archivo ejecutable. Si es un documento, la función ShellExecute lo abre o lo imprime, según el valor del parámetro lpOperation.
Si es un archivo ejecutable lo abrirá aunque lpOperation especifique que se imprima.
Puedes usar ShellExecute para abrir o explorar una carpeta. Para abrir una carpeta usa una de las siguientes llamadas :
ShellExecute(handle, NULL, path_to_folder, NULL, NULL, SW_SHOWNORMAL);
ShellExecute(handle, "open", path_to_folder, NULL, NULL, SW_SHOWNORMAL);
Para explorar una carpeta emplea la siguiente llamada :
ShellExecute(handle, "explore", path_to_folder, NULL, NULL, SW_SHOWNORMAL);
Si lpOperation es NULL, la función abre el fichero especificado por lpFile.
Si lpOperation es "open" o "explore", la función abrirá una ventana o el explorador de windows.