I use multiple browsers regularly, so I've written a script that will open pages in whatever browser is already running (or Firefox if there is none). I want to set this script as my default browser. When I go to the "Set Associations" dialog, select HTTP, and click "Change Program", the dialog that pops up doesn't allow me to select anything except one of the web browsers that I already have installed. This appears to be the case for all protocols (as opposed to file extensions, which allow you to choose from "Other Programs" or browse for a program that isn't listed). Windows help says nothing about this, and just says to use the "Browse…" button, which isn't available. I even tried the 3rd-party "Default Programs Editor", but it doesn't seem to be able to do this.
Is there a way that I can set my script as the default manually (maybe by editing the registry)?
Best Answer
Yes, you can script it with direct registry manipulation.
The Short Answer
Copy each of the following into
.reg
files (such asfirefox.reg
,chrome.reg
,ie.reg
) and run them when you want to switch (or, script withreg.exe
).For Firefox:
For Chrome:
For IE9:
The Long Answer
Windows stores per-user standard protocol Default Registrations under the
UrlAssociations
key, found atSimilar to file associations, there can be a "Default Program" for links. This is sort of jargon terminology that references the
UserChoice
key- there is also a standard file association-like shell registration under thehttp
ProgId which can also be changed, but the proximal configuration for browsers is via Default Programs (see bottom for an additional comment on this).What I'm talking about here is what you're changing when you go to the Default Programs section of the Control Panel to set a browser:
To configure this directly in the registry, let's first inspect that's already there. In this screenshot I've navigated to that key in
regedit.exe
, and Chrome is my default browser, designated by theChromeHTML
ProgId value.The minimum change you need to make to switch which browser opens when you click a link is to change the
ProgId
value under theUserChoice
subkey on each protocol you want to change (probablyhttp
andhttps
will be the same, but if for some reason you wanted to make each of those open in separate browsers, you could).Now it's just a matter of determining what to use for Firefox, IE, and any other browser you may want to switch to. If you wanted to determine this programmatically, you could do so by digging into the
Capabilities
key of the browser registration, found here for Firefox:HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet
is where all the browsers are listed, and each one should have the above structure.You can see from inspection that if I wanted to switch to Firefox, I'd use the
FirefoxURL
ProgId value back up in UrlAssociations.(However, if you didn't want to dig around like this, there's a quick cheat: Just set whatever browser you want as default, and refresh regedit to see what the browser has set for the
UserChoice
!)All we need to do is change that key value to
FirefoxURL
, and now links open in Firefox. After doing so you can either click a link or double check in the control panel that the right default is registered:Now if you've been paying close attention, you might have noticed a couple flaws with all of this:
IE doesn't have a
URLAssociations
subkey under it's browser registration inStartMenuInternet
, so where does the ProgId value come from? Answer: I don't know, at least not without more research. It may be hardcoded or found in another key I haven't found yet.Firefox's ProgId's under it's
URLAssociations
areFirefoxURL
, but when you click to register in the options in the browser itself, it usesFirefoxHTML
as the ProgId instead! Why? Again, I don't know. They both work because they both exist and point to Firefox. Maybe it's intentional, but it's probably just a bug with no effect.What happens when there's no
UserChoice
Default Program? Answer: the "regular" file association for the protocol (eg,http
) is used. This is found at the standard ProgId locations just like file associations (HKCU\Software\Classes
,HKLM\Software\Classes
, and the view atHKCR
). At least Chrome sets it's info there, I think, but Firefox doesn't seem to, at least in my tests.I recommend that if you want this added to Default Programs Editor, you should suggest and upvote it on that application's UserVoice Feedback page. I have it on good authority that the application author pays attention to that feedback when deciding how to spend his development time!