RESPUESTA A LA PREGUNTA 3779 DE VISUAL BASIC Cree un formulario al que incruste el objeto CommonDialog y puse un boton para iniciar la ejecucion del procedimiento. En el modulo bas se encuentran las definiciones de la api. Código del form: Option Explicit Private Sub Command1_Click() Dim hwndact As Long, vr As Long Dim aplic As String, x As String ' si ocurre un error ejecturar manipularerror On Error GoTo ManipularError ' generar un error cuando se pulse cancelar CommonDialog1.CancelError = True 'filtros x = "Formato RTF (*.rtf)" CommonDialog1.Filter = x CommonDialog1.FilterIndex = 1 'visualizar la caja de dialogo abrir CommonDialog1.ShowOpen 'nombre del fichero elegido aplic = CommonDialog1.FileTitle ' ejecuta la aplicacion asociada a los ficheros rtf y carga el fichero seleccionado If ShellExecute(hwnd, vbNullString, aplic, vbNullString, vbNullString, SW_SHOW) <= 32 Then MsgBox " el proceso requerido fallo" End If Exit Sub ManipularError: If Err.Number = cdlCancel Then Exit Sub MsgBox Err.Description End Sub ------------ Codigo del Bas: Option Explicit ' Comandos de ShowWindow() Public Const SW_HIDE = 0 Public Const SW_SHOWNORMAL = 1 Public Const SW_NORMAL = 1 Public Const SW_SHOWMINIMIZED = 2 Public Const SW_SHOWMAXIMIZED = 3 Public Const SW_MAXIMIZE = 3 Public Const SW_SHOWNOACTIVATE = 4 Public Const SW_SHOW = 5 Public Const SW_MINIMIZE = 6 Public Const SW_SHOWMINNOACTIVE = 7 Public Const SW_SHOWNA = 8 Public Const SW_RESTORE = 9 Public Const SW_SHOWDEFAULT = 10 Public Const SW_MAX = 10 ' valores de error para ShellExecute() superior a los códigos WinExec () normales Public Const SE_ERR_SHARE = 26 Public Const SE_ERR_ASSOCINCOMPLETE = 27 Public Const SE_ERR_DDETIMEOUT = 28 Public Const SE_ERR_DDEFAIL = 29 Public Const SE_ERR_DDEBUSY = 30 Public Const SE_ERR_NOASSOC = 31 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 ' // Comienzo de ShellExecuteEx y familia ' Códigos de error de ShellExecute() y ShellExecuteEx() ' Códigos normales de WinExec() Public Const SE_ERR_FNF = 2 ' archivo no encontrado Public Const SE_ERR_PNF = 3 ' ruta no encontrada Public Const SE_ERR_ACCESSDENIED = 5 ' acceso denegado Public Const SE_ERR_OOM = 8 ' no hay suficiente memoria Public Const SE_ERR_DLLNOTFOUND = 32 ' Observe que CLASSKEY ignora CLASSNAME Public Const SEE_MASK_CLASSNAME = &H1 Public Const SEE_MASK_CLASSKEY = &H3 ' Observe que INVOKEIDLIST ignora IDLIST Public Const SEE_MASK_IDLIST = &H4 Public Const SEE_MASK_INVOKEIDLIST = &HC Public Const SEE_MASK_ICON = &H10 Public Const SEE_MASK_HOTKEY = &H20 Public Const SEE_MASK_NOCLOSEPROCESS = &H40 Public Const SEE_MASK_CONNECTNETDRV = &H80 Public Const SEE_MASK_FLAG_DDEWAIT = &H100 Public Const SEE_MASK_DOENVSUBST = &H200 Public Const SEE_MASK_FLAG_NO_UI = &H400 Type SHELLEXECUTEINFO cbSize As Long fMask As Long hwnd As Long lpVerb As String lpFile As String lpParameters As String lpDirectory As String nShow As Long hInstApp As Long ' Optional fields lpIDList As Long lpClass As String hkeyClass As Long dwHotKey As Long hIcon As Long hProcess As Long End Type Declare Sub WinExecError Lib "shell32.dll" Alias "WinExecErrorA" (ByVal hwnd As Long, ByVal error As Long, ByVal lpstrFileName As String, ByVal lpstrTitle As String) ' // Fin de ShellExecuteEx y familia Un saludo y gracias. Alberto Garea Vidal agarea@canal21.com