Lo mas pronto posible
necesito Un procedimiento para acceder a la ruta de un archivo que necesito ejecutar o en su defecto ¿como implemento un shellexecute en visual basic para no tener que buscar el archivo? y simplemente que el sistema cargue el archivo con el programa que tenga por defecto asi no tengo que saber donde esta ubicado la aplicacion ejecutable y simplemente la carga con la aplicacion determinada por el sistema operativo
Ejecutar el programa asociado a un archivo.
Extraido de PCWorld
Javier Ferrad谩s / [email protected] / 04/12/00
Necesito poder mostrar a mis usuarios el contenido de los archivos de su disco duro independientemente del programa que tengan asociado, de una manera similar a como lo hace el explorador de Windows, que al hacer doble clic sobre un archivo siempre lo abre con el programa adecuado. Puedo analizar la extensi贸n de ciertos tipos de archivo e intentar lanzar el programa m谩s apropiado (el bloc de notas con los .txt, MS Excel con los .xls, etc...) pero no me parece el m茅todo m谩s adecuado. ¿Existe alguna forma mejor de hacerlo y que funcione en Visual Basic?
Cuando uno hace doble clic sobre un archivo en el explorador del sistema, Windows sabe cu谩l es el ejecutable asociado porque dicha informaci贸n se guarda en el registro. Concretamente, si abrimos la rama HKEY_CLASSES_ROOT podremos ver todos los tipos de archivos registrados. Si nos fijamos en el valor predeterminado de la clave cuyo nombre coincide con la extensi贸n del archivo averiguaremos la denominaci贸n del mismo. Si, posteriormente, buscamos en la misma rama esa denominaci贸n podremos averiguar el ejecutable asociado, que se encuentra bajo la clave Shell/Open/Command, tal y como se ilustra en la figura adjunta. Seg煤n esto, podr铆amos buscar la informaci贸n que necesitamos en el registro, usando para ello las funciones de las API correspondientes. Sin embargo, existe una manera mucho mejor incorporada al sistema y que efect煤a ese trabajo por nosotros (casi todas las tareas habituales tienen un atajo en la API de Windows). Concretamente, en el caso que nos ocupa podemos usar la funci贸n de la API ShellExecute, cuya definici贸n en VB es: Public 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 A continuaci贸n incluimos una funci贸n que hace exactamente lo que usted desea utilizando la API de Windows. Es una funci贸n id茅ntica a Shell de Visual Basic, pero ejecuta archivos averiguando su ejecutable asociado. Es una funci贸n as铆ncrona (o sea, devuelve el control inmediatamente) y usa las mismas constantes que en VB, por lo que puede sustituirla por cualquier llamada a Shell en su c贸digo y le funcionar谩 tanto para ejecutables normales como para archivos. Si escribe, por ejemplo, ShellPlus "C:\miarchivo.xls" abrir铆a Microsoft Excel (que es el programa asociado a la extensi贸n XLS), y an谩logamente con los dem谩s tipos de archivo. Incluimos tambi茅n una funci贸n auxiliar que extrae la ruta a partir de un nombre completo de archivo y que se utiliza desde dentro de ShellPlus.
Public Function ShellPlus(LineaComando As String, Optional Parametros As String, Optional EstiloVentana As Long, Optional ByVal VentanaMadre As Long) As Boolean
Dim i As Long
If IsMissing(EstiloVentana) Then
EstiloVentana = vbNormalFocus
End If
i = ShellExecute(VentanaMadre, vbNullString,
LineaComando, IIf(IsMissing(Parametros) Or (Parametros =
""), vbNullString, CStr(Parametros)), sExtraeRuta(LineaComando), CLng(EstiloVentana))
If i > 32 Then
ShellPlus = True
Else
ShellPlus = False
End If
End Function
Function sExtraeRuta(sNombreCompleto As String) As String
Dim i As Integer
For i = Len(sNombreCompleto) To 1 Step -1
If InStr(":\", Mid$(sNombreCompleto, i, 1)) Then Exit For
Next
sExtraeRuta = Left$(sNombreCompleto, i)
End Function
Esta funci贸n de la API sirve tambi茅n para simular hiperenlaces mediante c贸digo, abriendo el navegador o el cliente de correo cuando el usuario pulse, por ejemplo, sobre una etiqueta con texto subrayado. Basta escribir en el evento Click:
ShellExecute Me.hwnd, vbNullChar, "http://www.idg.es/pcworld/", "", vbNullChar, vbNormalFocus
para que nos env铆e a la p谩gina de PC World. Jos茅 M. Alarc贸n Agu铆n.
Extraido de PCWorld
Javier Ferrad谩s / [email protected] / 04/12/00
Necesito poder mostrar a mis usuarios el contenido de los archivos de su disco duro independientemente del programa que tengan asociado, de una manera similar a como lo hace el explorador de Windows, que al hacer doble clic sobre un archivo siempre lo abre con el programa adecuado. Puedo analizar la extensi贸n de ciertos tipos de archivo e intentar lanzar el programa m谩s apropiado (el bloc de notas con los .txt, MS Excel con los .xls, etc...) pero no me parece el m茅todo m谩s adecuado. ¿Existe alguna forma mejor de hacerlo y que funcione en Visual Basic?
Cuando uno hace doble clic sobre un archivo en el explorador del sistema, Windows sabe cu谩l es el ejecutable asociado porque dicha informaci贸n se guarda en el registro. Concretamente, si abrimos la rama HKEY_CLASSES_ROOT podremos ver todos los tipos de archivos registrados. Si nos fijamos en el valor predeterminado de la clave cuyo nombre coincide con la extensi贸n del archivo averiguaremos la denominaci贸n del mismo. Si, posteriormente, buscamos en la misma rama esa denominaci贸n podremos averiguar el ejecutable asociado, que se encuentra bajo la clave Shell/Open/Command, tal y como se ilustra en la figura adjunta. Seg煤n esto, podr铆amos buscar la informaci贸n que necesitamos en el registro, usando para ello las funciones de las API correspondientes. Sin embargo, existe una manera mucho mejor incorporada al sistema y que efect煤a ese trabajo por nosotros (casi todas las tareas habituales tienen un atajo en la API de Windows). Concretamente, en el caso que nos ocupa podemos usar la funci贸n de la API ShellExecute, cuya definici贸n en VB es: Public 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 A continuaci贸n incluimos una funci贸n que hace exactamente lo que usted desea utilizando la API de Windows. Es una funci贸n id茅ntica a Shell de Visual Basic, pero ejecuta archivos averiguando su ejecutable asociado. Es una funci贸n as铆ncrona (o sea, devuelve el control inmediatamente) y usa las mismas constantes que en VB, por lo que puede sustituirla por cualquier llamada a Shell en su c贸digo y le funcionar谩 tanto para ejecutables normales como para archivos. Si escribe, por ejemplo, ShellPlus "C:\miarchivo.xls" abrir铆a Microsoft Excel (que es el programa asociado a la extensi贸n XLS), y an谩logamente con los dem谩s tipos de archivo. Incluimos tambi茅n una funci贸n auxiliar que extrae la ruta a partir de un nombre completo de archivo y que se utiliza desde dentro de ShellPlus.
Public Function ShellPlus(LineaComando As String, Optional Parametros As String, Optional EstiloVentana As Long, Optional ByVal VentanaMadre As Long) As Boolean
Dim i As Long
If IsMissing(EstiloVentana) Then
EstiloVentana = vbNormalFocus
End If
i = ShellExecute(VentanaMadre, vbNullString,
LineaComando, IIf(IsMissing(Parametros) Or (Parametros =
""), vbNullString, CStr(Parametros)), sExtraeRuta(LineaComando), CLng(EstiloVentana))
If i > 32 Then
ShellPlus = True
Else
ShellPlus = False
End If
End Function
Function sExtraeRuta(sNombreCompleto As String) As String
Dim i As Integer
For i = Len(sNombreCompleto) To 1 Step -1
If InStr(":\", Mid$(sNombreCompleto, i, 1)) Then Exit For
Next
sExtraeRuta = Left$(sNombreCompleto, i)
End Function
Esta funci贸n de la API sirve tambi茅n para simular hiperenlaces mediante c贸digo, abriendo el navegador o el cliente de correo cuando el usuario pulse, por ejemplo, sobre una etiqueta con texto subrayado. Basta escribir en el evento Click:
ShellExecute Me.hwnd, vbNullChar, "http://www.idg.es/pcworld/", "", vbNullChar, vbNormalFocus
para que nos env铆e a la p谩gina de PC World. Jos茅 M. Alarc贸n Agu铆n.
