Is there a common method/api to list all web browsers (name, executable, default yes/no) installed on my machine (and per user), and how to find out which is the default web browser?
I have seen this question: How to find all the browsers installed on a machine
And on MSDN: How to Register an Internet Browser or Email Client With the Windows Start Menu which states that web-browsers should register themselves under HKLM\SOFTWARE\Clients\StartMenuInternet
(and HKCU
)
Is that really the common/correct approach? (And if yes, any solid implementation out there?)
My goal is to create a drop-down menu with a list of all web-browsers installed on user's machine (indicating the default), and allow the user to browse his HTML file/URLs with one of the external web-browser available.
There are four leading web browsers − Explorer, Firefox, Netscape, and Safari, but there are many others browsers available. You might be interested in knowing Complete Browser Statistics. Now we will see these browsers in bit more detail.
In the browser's toolbar, click on “Help"or the Settings icon. Click the menu option that begins “About” and you'll see what type and version of browser you are using.
Types of web browsers for Windows Web browsers have come a long way from the era of Netscape and Internet Explorer. Today, mostly two types of web browsers are used worldwide. Chromium-based browsers like Google Chrome, Edge, and Vivaldi are of the first type.
You could do something like
procedure ListRegisteredBrowsers(List: TStrings);
var
reg: TRegistry;
ki: TRegKeyInfo;
i: Integer;
keyname: string;
len: DWORD;
begin
reg := TRegistry.Create;
try
reg.RootKey := HKEY_LOCAL_MACHINE;
if not Reg.KeyExists('\SOFTWARE\Clients\StartMenuInternet') then Exit;
if not Reg.OpenKey('\SOFTWARE\Clients\StartMenuInternet', false) then
raise Exception.Create('ListRegisteredBrowsers: Could not open registry key.');
if not reg.GetKeyInfo(ki) then
raise Exception.Create('ListRegisteredBrowsers: Could not obtain registry key information.');
List.Clear;
SetLength(keyname, len);
for i := 0 to ki.NumSubKeys - 1 do
begin
len := ki.MaxSubKeyLen + 1;
if RegEnumKeyEx(reg.CurrentKey, i, PChar(keyname), len, nil, nil, nil, nil) <> ERROR_SUCCESS then
RaiseLastOSError;
if reg.OpenKey('\SOFTWARE\Clients\StartMenuInternet\' + keyname, false) then
List.Add(reg.ReadString(''));
Reg.OpenKey('\SOFTWARE\Clients\StartMenuInternet', true);
end;
finally
reg.Free;
end;
end;
and
function GetDefaultBrowser: string;
var
reg: TRegistry;
begin
result := '';
reg := TRegistry.Create;
try
reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('\SOFTWARE\Clients\StartMenuInternet', false) then
result := reg.ReadString('')
else
begin
reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\SOFTWARE\Clients\StartMenuInternet', false) then
result := reg.ReadString('')
end;
reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\SOFTWARE\Clients\StartMenuInternet\' + result, false) then
result := reg.ReadString('');
finally
reg.Free;
end;
end;
Test it:
procedure TForm1.Button1Click(Sender: TObject);
var
sl: TStringList;
i: Integer;
DefBrw: string;
begin
DefBrw := GetDefaultBrowser;
sl := TStringList.Create;
try
ListRegisteredBrowsers(sl);
Memo1.Lines.BeginUpdate;
for i := 0 to sl.Count - 1 do
if SameText(sl[i], DefBrw) then
Memo1.Lines.Add(sl[i] + ' (Default)')
else
Memo1.Lines.Add(sl[i]);
Memo1.Lines.EndUpdate;
finally
sl.Free;
end;
end;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With