La Web del Programador: Comunidad de Programadores
 
    Pregunta:  24051 - CODIGO PARA PONER UN PROGRAMA COMO PREDETERMINADO
Autor:  antonio Gomez Sanchez
Me gustaria saber cual es el codigo para poner como predeterminado un programa creado con visual basic que este en conflicto con otro.
Ya que he creado un navegador para ver paginas web y me gustaria que saliera en tiempo de ejecucion un formulario que te preguntase si quieres poner el Navegador como predeterminado asi podrias abrir vinculos con ese navegador o ver paginas webs offline sin tener que usar el predeterminado como por ejemplo I.EXPLORER O NETSCAPE

  Respuesta:  Eduard Pascual Sáez
Si echas un vistazo al registro de Windows, verás que en HKEY_CLASSES_ROOT aparecen todas las extensiones de archivo reconocidas por el sistema, así como el tipo de archivo que representan. Por ejemplo, en mi máquina los archivos .htm son del tipo htmlfile. Más abajo, en la entrada htmlfile/shell/open/command, aparece
"C:\Archivos de programa\Internet Explorer\iexplore.exe" -nohome
Si cambias esta entrada por algo así como:
App.Path + App.ExeName + "%1", obtendrás que cuando windows quiera ejecutar un archivo que identifique como 'htmlfile' lance tu ejecutable pasándole el nombre completo del archivo como parámetro. Luego sólo te has de preocupar de leer el parámetro y hacer que tu programa abra el archivo. Si es un navegador, te puede servir algo así:
comboboxDireccion.Text = parametro
comboboxDireccion_KeyPress(KeyCodeConstants.vbKeyReturn)
Esto hace creer a tu programa que el usuario ha insertado la dirección del archivo en la barra de direcciones y ha presionado Enter.
Puedes abreviar con comboboxDireccion_KeyPress(13), pero te recomiendo añadir un comentario al código para recordar que el 13 es el código de la tecla Enter.
Por último, solo te falta consultar el registro cuando se inicie tu aplicación y, si el usuario desea establecer tu programa como predeterminado, modificar el registro. Para ello hay dos métodos: el primero consiste en abrir los archivos .dat del registro y modificarlos a pelo... poco recomendable. El segundo consiste en usar la API de Windows... algo peligroso pero eficaz cuando sabes lo que tocas. Deberás buscar las extensiones que quieras asociar a tu programa (con el . incluído) en HKEY_CLASSES_ROOT y consultar la entrada predeterminada. Una vez las tengas todas (usa un array de String), tendrás los tipos de archivo. Antes de continuar, estaría bien revisar el array en busca de valores duplicados, pero no es imprescindible. Las direccioes del registro que tendrás que modificar a continuacion serán algo así como:
Dim tipoArchivo As String, entrada As String
For Each tipoArchivo in TiposArchivos Do 'TiposArchivos seria el array...
entrada = "HKEY_CLASSES_ROOT\" & tipoarchivo & "\shell\open\command\"
'codigo para modificar o leer cada entrada
Next
En cada entrada, el contenido de la clave predeterminada es el comando que se ejecutará cuando un usuario intente abrir un archivo del tipo correspondiente. Si deseas que tu programa reciba el nombre completo del archivo como parámetro, indícalo con el parámetro %1 después de la ruta de tu programa.
El código para modificar el registro lo dejo en tus manos. Hay muchas bibliotecas por la red que facilitan el manejo del registro desde VB. Si necesitas más ayuda, no dudes en enviarme un e-mail.
Atentamente, Eduard Pascual,
programador semi-profesional