Solución:
Sí, puede crear un script con manipulación directa del registro.
La respuesta corta
Copie cada uno de los siguientes en .reg
archivos (como firefox.reg
, chrome.reg
, ie.reg
) y ejecútelos cuando desee cambiar (o script con reg.exe
).
Para Firefox:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsShellAssociationsUrlAssociationshttpUserChoice]
"ProgId"="FirefoxURL"
Para Chrome:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsShellAssociationsUrlAssociationshttpUserChoice]
"ProgId"="ChromeHTML"
Para IE9:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsShellAssociationsUrlAssociationshttpUserChoice]
"ProgId"="IE.HTTP"
La respuesta larga
Windows almacena los registros predeterminados del protocolo estándar por usuario bajo el UrlAssociations
clave, que se encuentra en
HKEY_CURRENT_USERSoftwareMicrosoftWindowsShellAssociationsUrlAssociations
Al igual que en las asociaciones de archivos, puede haber un “Programa predeterminado” para los enlaces. Esta es una especie de terminología de jerga que hace referencia a la UserChoice
clave: también hay un registro de shell similar a una asociación de archivos estándar bajo el http
ProgId que puede además cambiar, pero la configuración próxima para los navegadores es a través de Programas predeterminados (consulte la parte inferior para obtener un comentario adicional sobre esto).
De lo que estoy hablando aquí es de lo que está cambiando cuando va a la sección Programas predeterminados del Panel de control para configurar un navegador:
Para configurar esto directamente en el registro, primero inspeccionemos que ya está allí. En esta captura de pantalla, navegué hasta esa clave en regedit.exe
y Chrome es mi navegador predeterminado, designado por el ChromeHTML
Valor de ProgId.
El cambio mínimo que debe realizar para cambiar qué navegador se abre cuando hace clic en un enlace es cambiar el ProgId
valor bajo el UserChoice
subclave en cada protocolo que desea cambiar (probablemente http
y https
será el mismo, pero si por alguna razón quisiera que cada uno de ellos se abriera en navegadores separados, podría hacerlo).
Ahora es solo una cuestión de determinar qué usar para Firefox, IE y cualquier otro navegador al que desee cambiar. Si desea determinar esto mediante programación, puede hacerlo investigando el Capabilities
clave del registro del navegador, que se encuentra aquí para Firefox:
HKEY_LOCAL_MACHINESOFTWAREClientsStartMenuInternetFIREFOX.EXECapabilitiesURLAssociations
HKEY_LOCAL_MACHINESOFTWAREClientsStartMenuInternet
es donde se enumeran todos los navegadores, y cada uno debe tener la estructura anterior.
Puede ver en la inspección que si quisiera cambiar a Firefox, usaría el FirefoxURL
Copia de seguridad del valor ProgId en UrlAssociations.
(Sin embargo, si no quería investigar así, hay un truco rápido: simplemente configure el navegador que desee como predeterminado y actualice regedit para ver lo que el navegador ha configurado para el UserChoice
!)
Todo lo que tenemos que hacer es cambiar ese valor clave a FirefoxURL
, y ahora los enlaces se abren en Firefox. Después de hacerlo, puede hacer clic en un enlace o verificar en el panel de control que el valor predeterminado correcto esté registrado:
Ahora bien, si ha prestado mucha atención, es posible que haya notado un par de fallas con todo esto:
-
IE no tiene
URLAssociations
subclave debajo de su registro del navegador enStartMenuInternet
, entonces, ¿de dónde proviene el valor de ProgId? Respuesta: No lo sé, al menos no sin más investigación. Puede estar codificado o encontrado en otra clave que aún no he encontrado. -
ProgId de Firefox está debajo
URLAssociations
estánFirefoxURL
, pero cuando hace clic para registrarse en las opciones del propio navegador, utilizaFirefoxHTML
como ProgId en su lugar! ¿Por qué? De nuevo, no lo sé. Ambos funcionan porque ambos existen y apuntan a Firefox. Tal vez sea intencional, pero probablemente sea solo un error sin efecto. -
¿Qué pasa cuando no hay
UserChoice
¿Programa preestablecido? Respuesta: la asociación de archivos “normal” para el protocolo (p. Ej.,http
) se utiliza. Esto se encuentra en las ubicaciones estándar de ProgId al igual que las asociaciones de archivos (HKCUSoftwareClasses
,HKLMSoftwareClasses
, y la vista enHKCR
). Al menos Chrome establece su información allí, creo, pero Firefox no parece hacerlo, al menos en mis pruebas. -
Recomiendo que si desea agregar esto al Editor de programas predeterminado, debe sugerirlo y votarlo en la página de comentarios de UserVoice de esa aplicación. Tengo entendido que el autor de la aplicación presta atención a esos comentarios cuando decide cómo dedicar su tiempo de desarrollo.