Visual Basic - Asociar un icono y un programa a un archivo determ

Life is soft - evento anual de software empresarial
 
Vista:

Asociar un icono y un programa a un archivo determ

Publicado por Douch (6 intervenciones) el 07/03/2003 17:00:38
Hola, estoy haciendo un programa con Visual Basic 6, el cual usa archivos con una extensión específica, impuesta por mí. Lo que me gustaría saber es como hacer que Windows relacione automáticamente, tras una instalación, a dicha extensión con mi programa, para poder abrirla automáticamente.
Por poner un ejemplo, lo archivos con extensión (.zip), si el Winzip no se encuentra instalado, cada vez que se intente abrir alguno de éstos, Windows me muestra una lista con los programas disponibles, para intentar abrir el archivo. En cambio, una vez que se ha instalado el Winzip, la extensión (.zip) se asocia al programa, con lo que se puede abrir directamente el archivo, haciendo simplemente doble click sobre él.

También quería saber como se le puede asignar, de igual forma, es decir, automáticamente, un icono ha dicha extensión.

Un saludo.
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:Asociar un icono y un programa a un archivo det

Publicado por Ernesto D'Spirito (7 intervenciones) el 07/03/2003 22:19:17
Tienes que establecer los valores de los siguientes datos en el registro de Windows (creando las claves si no existieran):

HKCR\.ext\
(Predeterminado) = tipoext

HKCR\tipoext\
(Predeterminado) = descripcion

HKCR\tipoext\DefaultIcon\
(Predeterminado) = U:\Camino\Programa.exe,0

HKCR\tipoext\Shell\Open\
(Predeterminado) = &Abrir

HKCR\tipoext\Shell\Open\Command\
(Predeterminado) = "U:\Camino\Programa.exe" "%1"

Puedes hacerlo programáticamente usando las APIs de Windows para operar con el registro: RegCreateKeyEx (para abrir una clave creándola si no existiera), RegSetValueEx (para escribir el valor de un dato) y RegCloseKey (para cerrar la clave cuando terminamos de trabajar con ella).

Espero que te sirva.

Ernesto D'Spirito
http://www.latiumsoftware.com/es/index.php
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

Aclaración y ejemplo

Publicado por Ernesto D'Spirito (7 intervenciones) el 07/03/2003 23:55:24
Por si acaso quería aclararte que para el valor (Predeterminado) no se debe pasar "(Predeterminado)" a la API RegSetValueEx en el parámetro lpValueName sino "".

Al finalizar los cambios sería bueno notificar de los mismos al Explorador de Windows (y otras aplicaciones en general). Eso se hace con la API SHChangeNotify.

Private Declare Sub SHChangeNotify Lib "shell32.dll" (ByVal wEventId As Long, _
ByVal uFlags As Long, ByVal dwItem1 As Long, ByVal dwItem2 As Long)
Const SHCNE_ASSOCCHANGED = &H8000000
Const SHCNF_IDLIST = 0

Sub RealizarAsociacion(Extension As String, TipoArch As String, _
Descripcion As String, RutaExe As String, Icono As Integer, _
Notificar As Boolean)
Call WarRegSet(HKEY_CLASSES_ROOT, Extension, "", TipoArch)
Call WarRegSet(HKEY_CLASSES_ROOT, TipoArch, "", Descripcion)
Call WarRegSet(HKEY_CLASSES_ROOT, TipoArch & "\DefaultIcon", _
"", RutaExe & "," & Icono)
Call WarRegSet(HKEY_CLASSES_ROOT, TipoArch & "\Sell\Open", _
"", "&Abrir")
Call WarRegSet(HKEY_CLASSES_ROOT, TipoArch & "\Sell\Open", _
"", "&Abrir")
Call WarRegSet(HKEY_CLASSES_ROOT, TipoArch & "\Sell\Command", _
"", Chr$(34) & RutaExe & Chr$(34) & " " & Chr$(34) & "%1" & Chr$(34))
If Notificar Then
' Notificar de los cambios al Explorador de Windows
Call SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0)
End If
End Sub

La función WarRegSet la puedes encontrar en un módulo con funciones útiles para acceder al registro publicado en

http://www.experts-exchange.com/Programming/Programming_Languages/Visual_Basic/Q_20374637.html

Espero que te sirva.

Ernesto D'Spirito
http://www.latiumsoftware.com/es/index.php
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:Aclaración y ejemplo

Publicado por Douch (6 intervenciones) el 08/03/2003 13:27:31
Pues macho, me has ayudado muchísimo, y te lo agradezco de verdad.

Muchas gracias y un saludo.
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