Список всех веб-браузеров, установленных на компьютере с Windows - PullRequest
5 голосов
/ 23 марта 2012

Существует ли общий метод / api для отображения всех веб-браузеров (имя, исполняемый файл, по умолчанию да / нет), установленных на моем компьютере (и для каждого пользователя), и как узнать, какой из них используется по умолчаниювеб-браузер?

Я видел этот вопрос: Как найти все браузеры, установленные на машине

И на MSDN: Как зарегистрировать интернет-браузер или почтовый клиентС Windows Start Menu , которая гласит, что веб-браузеры должны зарегистрироваться под HKLM\SOFTWARE\Clients\StartMenuInternetHKCU)

Это действительно общий / правильный подход?(И если да, есть ли надежная реализация?)


Моя цель - создать раскрывающееся меню со списком всех веб-браузеров, установленных на компьютере пользователя (с указанием по умолчанию), иразрешить пользователю просматривать его HTML-файл / URL-адреса с помощью одного из доступных внешних веб-браузеров.

Ответы [ 2 ]

6 голосов
/ 23 марта 2012

Вы можете сделать что-то вроде

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;

и

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;

Проверьте это:

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;
6 голосов
/ 23 марта 2012

Этот метод находит все браузеры, которые зарегистрированы как Меню "Пуск" Интернет-приложения .На практике этого будет достаточно, поскольку все основные браузеры регистрируются таким образом.Если браузеру не удается зарегистрировать себя как меню «Пуск» Интернет-приложений , то у него нет шансов заметить это Windows и предложить этот браузер пользователю.

В разделе MSDN, объясняющем все это,здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/dd203067.aspx

Меню «Пуск» в Windows XP и Windows Vista содержит зарезервированные слоты для клиентов Интернета (браузера) и электронной почты (почты) по умолчанию, которые также широко известны как Интернет-приложения «Пуск»,Приложения, которые регистрируются как интернет-приложения «Пуск», делают это во всей системе (для каждой машины).В Windows Vista пользователь может использовать функцию «Программы по умолчанию» для установки параметров по умолчанию для каждого пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...