Visual Basic - Como Abro *.txt o *.doc o cualquier archivo

Life is soft - evento anual de software empresarial
 
Vista:

Como Abro *.txt o *.doc o cualquier archivo

Publicado por Alberto (1 intervención) el 10/08/2005 12:47:28
Quiero saber como se abren programas o aplicaciones, por ejemplo quiero hacer un ejecutable para un cd y quiro abrir un txt como lo hago?, esque no encuentro nada por ningun lado. O por ejemplo un doc o algo pero que se abra. Prove el call Shell pero esque solo me abre *.exe . A ver si alguien me puede hechar una manita ok? Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Como Abro ...

Publicado por AFleming (52 intervenciones) el 10/08/2005 15:19:24
el txt lo abres pasando su direccion como parametro al bloc de notas...

ejm:

nombreArchivo="C:\archivo.txt"
call Shell("notepad.exe " & nombreArchivo)

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Usa la API ShellExecute

Publicado por Zoto (41 intervenciones) el 10/08/2005 17:52:38
Hola amigo Alberto.

Pues, referente a lo que preguntas, existe una API capaz de realizar semejante operación, es decir, existe una API para abrir cualquier tipo de archivo, ya sea ejecutable o un archivo cualquiera, con la condición de que este útlimo se abrirá siempre con el programa que le ha sido ajudicado.
Por ejemplo, si se trata de un documento de Word, se abrirá el documento dado en Word, si es una hoja de Excel, pues se abrirá dicha hoja en Excel, etc.

Esa API se llama ShellExecute y esta es su declaración:

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

Parámetros:

hwnd - especifica la ventana principal que mostrará los mensajes enviados por la aplicación. Por ejemplo, errores u otros mensajes de advertencia.

lpOperation - cadena de texto (String) que determina la operación a hacer. Opciones posibles:

"open" - abre un archivo (ejecutable o documento) o carpeta
"print" - imprime un archivo si es un documento o abre un archivo ejecutable, es decir, en ejecutables tiene el mismo efecto que "open".
"explore" - abre con el Explorer la carpeta (tiene el mismo efecto que "open" en carpetas)

Las operaciones siempre hacen referencia al archivo o carpeta especificado en lpFile.
Si lpOperation es nulo es como si tuviera escrito "open" (abre el archivo).

lpFile - cadena de texto (String) que determina el archivo a abrir, documento a imprimir, carpeta a explorar, etc

lpParameters - si el archivo es un ejecutable lpParameters contiene un String con los parámetros necesarios para dicho programa.
Si se trata de un documento, debe ser nulo ("")

lpDirectory - String que contiene el directorio del archivo, documento o carpeta contenido en lpFile

nShowCmd - determina como será mostrado lpFile si se trata de un ejecutable. Si lo que deseas abrir se trata de un documento o carpeta, debe ser nulo (0)

Algunos de los parámetros más útiles que puede contener son:

SW_HIDE - muestra la ventana en segundo plano
SW_MAXIMIZE - muestra la ventana maximizada
SW_MINIMIZE - muestra la ventana minimizada

Estos son tres de los más usados pero puedes encontrar más buscando información sobre la API de Visual Basic ShellExecute (en Google o en la web Microsoft)

Aquí termina la información que te puedo dar acerca de esta API.
A continuación, escribo un ejemplo de como utilizarla:

En un formulario de un nuevo proyecto un CommandButton (Command1).

Y, en el editor de código de formulario, escribe el siguiente código:

'==============================================================================================================================
'CÓDIGO PARA ABRIR CUALQUIER TIPO DE ARCHIVO (EJECUTABLE O DOCUMENTO CON SU APLICACIÓN RELACIONADA)
'==============================================================================================================================

'La declaración de la API necesaria(ShellExecute)

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

Private Sub Command1_Click()
'Se llama a la función ShellExecute para abrir un documento de Word
'llamado documentoword.doc
'situado en el directorio C:\

'La ventana principal (la que recibirá los mensajes de la aplicación)
'será el formulario actual Me (Form1)

'La operación a realizar es abrir el archivo ("open"), aunque si se deja
'en nulo dicho parámetro (lpOperation) también haría lo mismo la línea de código

'El siguiente parámetro, lpFile contiene el nombre del archivo sin el directorio (Path), que
'en mi caso es "documentoword.doc"

'Después tenemos el parámetro lpParameters que es nulo ("") puesto que
'el archivo a abrir no es un ejecutable y no debemos pasarle parámetros

'Añadimos la ruta de directorio, en mi caso en "C:\"

'El último parámetro lo dejamos nulo, puesto
'que la aplicación no es un ejecutable y no debemos
'especificar cómo mostrará la ventana

ShellExecute Me.hwnd, "open", "documentoword.doc", "", "C:\", 0
End Sub

'==============================================================================================================================

Antes de ejecutar este código debes asegurarte de que creas el archivo "documentoword.doc" en el directorio "C:\ (C:\documentoword.doc)

Después de hacerlo, si pulsas el CommandButton del formulario se abrirá dicho archivo con Word.

Lo mismo puedes hacer con cualquier tipo de archivo.

Aquí te doy una lista con todos los valores que devuelve:

Si la función se realiza correctamente, el valor de retorno es el handle de la aplicación ejecutada o el handle de una "dynamic data exchange" (DDE - intercambio de datos dinámico) de una aplicación del servidor

Si la función falla, el valor de retorno es uno igual o menor a 32. Aquí listo todos estos valores:

0
El Sistema Operativo no tiene memoria suficiente

ERROR_FILE_NOT_FOUND
No se encontró el archivo especificado

ERROR_PATH_NOT_FOUND
No se encontró el directorio especificado

ERROR_BAD_FORMAT
El archivo ejecutable .EXE es inválido (no un .EXE para Win32 o la imagen de .EXE es errónea)

SE_ERR_ACCESSDENIED
El Sistema Operativo ha denegado el acceso al archivo especificado

SE_ERR_ASSOCINCOMPLETE
La asociación del nombre de archivo es incompleta o inválida

SE_ERR_DDEBUSY
La transacción DDE no pudo ser completada porque otras transacciones DDE estaban en proceso.

SE_ERR_DDEFAIL
La transacción DDE falló.

SE_ERR_DDETIMEOUT
La transacción DDE no pudo ser completada porque la demanda expiró el tiempo límite.

SE_ERR_DLLNOTFOUND
La DLL especificado no pudo ser encontrada

SE_ERR_FNF
No se encontró el archivo especificado

SE_ERR_NOASSOC
No existe ninguna aplicación asociada con la extensión de archivo dada.

SE_ERR_OOM
No hay suficiente memoria para completar la operación

SE_ERR_PNF
No se encontró el directorio especificado

SE_ERR_SHARE
Ha ocurrido una violación de archivos compartidos

Espero que toda esta información que te ha dado sobre la API ShellExecute (que me ha costado, todo se debe decir, bastante tiempo de recopilar)
te ayude lo más posible.

Hasta otra,

Zoto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Usa la API ShellExecute

Publicado por Obeth Ortiz (1 intervención) el 11/08/2007 21:45:35
Hola amigo este es un excelente aporte pero tengo un problema al ejecutar esta sentencia del shellExecute afecta gravemente el rendimiento del procesador.

Tienes idea si tiene que ver con la forma de manda a llamar a la ventana en concreto con la caracteristica de nShowCmd o algo que pueda estar afectando.

Muchas Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Usa la API ShellExecute

Publicado por Jorge (1 intervención) el 08/10/2007 01:30:56
Hola,

Justo andaba buscando temas referente a las shellexecute y encontré esta conversación. Todo muy útil e interesante.

Quisiera añadir otra pregunta a esta información y que tiene que ver lo que requiero saber.

Una vez se ha ejecutado la aplición, cómo puedo saber cuándo esta ha terminado. Lo que ocurre es que mediante VisualBasic requiero ejecutar una aplicación, la cual se encarga de realizar un par de cálculos numérico, pero una vez que los cálculos de hayan realizado requiero utilizaros con la misma aplicación visualbasic. Es esto posible?. Puede visualbasic saber cuando el proceso termina para volver a ejecutarse?.

El asunto es que como las aplicaciones que se ejecuten con el shell son varias y consideran diferentes tiempos de operación, resulta poco óptimo esperar que termine para volver a ejecutar visualbasic de forma manual, por eso es que me gustaría automatizarlo.

Yo había pensado que a lo mejor se puede mirar los procesos en el administrador de tareas de Windows, pero nosé como se hace.

Si a lo mejor alguien me puede ayudar se lo agradecería mucho. Mi vida depende de esto.

Gracias,
Jorge
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Usa la API ShellExecute

Publicado por Alberto Gonzalez (2 intervenciones) el 18/12/2009 12:34:02
Hola buenos dias, me pasa que a veces la f uncion ShellExecute no se ejecuta. Tengo un bucle donde cada 90 contactos me ejecute ShellExecute para que me abra el outlook y poder enviar un mail. Hay vueltas de bucle que se ejecuta y me sale Outloook y otras veces no se ejecuta.

Lo he probado sin bucles, es decir, ejecutando cada vez para cada 90 contactos pero sucede lo mismo. Alguien me puede ayudar??

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Usa la API ShellExecute

Publicado por Mary (1 intervención) el 04/06/2010 16:51:38
Hola necesito ayuda estoy haciendo un sistema que al seleccionar en un combobox me abra las imagenes que se encuentran en el ya yo llene el combobox y ya se encuentran las imagenes pero noc como hacer para que me las muestre por favor necesito ayuda gracias XD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar