Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как узнать Browser по умолчанию

Delphi , Интернет и Сети , Браузер

Как узнать Browser по умолчанию

Автор: http://www.swissdelphicenter.ch

{
First we create a temporary file and call the
function FindExecutable to get the associated Application.
}

function GetAppName(Doc: string): string;
var
  FN, DN, RES: array[0..255] of char;
begin
  StrPCopy(FN, DOC);
  DN[0] := #0;
  RES[0] := #0;
  FindExecutable(FN, DN, RES);
  Result := StrPas(RES);
end;

function GetTempFile(const Extension: string): string;
var
  Buffer: array[0..MAX_PATH] of char;
  aFile: string;
begin
  GetTempPath(SizeOf(Buffer) - 1, Buffer);
  GetTempFileName(Buffer, 'TMP', 0, Buffer);
  SetString(aFile, Buffer, StrLen(Buffer));
  Result := ChangeFileExt(aFile, Extension);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  f: System.Text;
  temp: string;
begin
  // get a unique temporary file name
  // eine eindeutige Temporare Datei bekommen
  temp := GetTempFile('.htm');
  // Create the file
  // Datei erstellen
  AssignFile(f, temp);
  rewrite(f);
  closefile(f);
  // Show the path to the browser
  // Pfad + Programmname zum Browser anzeigen.
  ShowMessage(GetAppName(temp));
  // Finally delete the temporary file
  // Temporaare Datei wieder loschen
  Erase(f);
end;

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

//Using the Registry:
//************************************************

uses
  Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
  Reg: TRegistry;
  KeyName: string;
  ValueStr: string;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;
    KeyName := 'htmlfile\shell\open\command';
    if Reg.OpenKey(KeyName, False) then
    begin
      ValueStr := Reg.ReadString('');
      Reg.CloseKey;
      ShowMessage(ValueStr);
    end
    else
      ShowMessage('There is nоt a default browser');
  finally
    Reg.Free;
  end;
end;

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

//************************************************
 {Copyright (c) by Code Central}

type
  TBrowserInformation = record
    Name: string;
    Path: string;
    Version: string;
  end;

function LongPathName(ShortPathName: string): string;
var
  PIDL: PItemIDList;
  Desktop: IShellFolder;
  WidePathName: WideString;
  AnsiPathName: AnsiString;
begin
  Result := ShortPathName;
  if Succeeded(SHGetDesktopFolder(Desktop)) then
  begin
    WidePathName := ShortPathName;
    if Succeeded(Desktop.ParseDisplayName(0, nil, PWideChar(WidePathName),
      ULONG(nil^), PIDL, ULONG(nil^))) then

    try
      SetLength(AnsiPathName, MAX_PATH);
      SHGetPathFromIDList(PIDL, PChar(AnsiPathName));
      Result := PChar(AnsiPathName);

    finally
      CoTaskMemFree(PIDL);
    end;
  end;
end;

function GetDefaultBrowser: TBrowserInformation;
var
  tmp: PChar;
  res: LPTSTR;
  Version: Pointer;
  VersionInformation: Pointer;
  VersionInformationSize: Integer;
  Dummy: DWORD;
begin
  tmp := StrAlloc(255);
  res := StrAlloc(255);
  Version := nil;
  try
    GetTempPath(255, tmp);
    if FileCreate(tmp + 'htmpl.htm') <> -1 then
    begin
      if FindExecutable('htmpl.htm', tmp, res) > 32 then
      begin
        Result.Name := ExtractFileName(res);
        Result.Path := LongPathName(ExtractFilePath(res));
        // Try to determine the Browser Version
        VersionInformationSize := GetFileVersionInfoSize(Res, Dummy);
        if VersionInformationSize > 0 then
        begin
          GetMem(VersionInformation, VersionInformationSize);
          GetFileVersionInfo(Res, 0, VersionInformationSize,
            VersionInformation);
          VerQueryValue(VersionInformation,
            ('StringFileInfo040904E4ProductVersion'),
            Pointer(Version), Dummy);
          if Version <> nil then
            Result.Version := PChar(Version);
          FreeMem(VersionInformation);
        end;
      end
      else
        ShowMessage('Cannot determine the executable.');
      SysUtils.DeleteFile(tmp + 'htmpl.htm');
    end
    else
      ShowMessage('Cannot create temporary file.');
  finally
    StrDispose(tmp);
    StrDispose(res);
  end;
end;

Программный код, предоставленный вами, написан на языке Delphi и предназначен для поиска умолчанию браузера на системе Windows. В коде используются три различных метода для достижения этого:

Метод 1: Использование FindExecutable В этом методе временный файл с расширением .htm создается с помощью функции GetTempFile. Затем функция FindExecutable вызывается с путем к временному файлу в качестве входных данных. Функция возвращает путь и имя исполняемого файла, который может открыть указанный тип файла (в этом случае, HTML). Умолчанию браузер считается быть приложением, ассоциированным с типом файла .htm.

Метод 2: Использование реестра В этом методе ключ реестра HKEY_CLASSES_ROOT\htmlfile\shell\open\command доступен с помощью класса TRegistry. Этот ключ содержит путь и командные аргументы для умолчательного браузера. Значение этого ключа отображается в сообщении об ошибке.

Метод 3: Использование длинных путей В этом методе функция LongPathName используется для преобразования коротких имен файлов в длинные имена файлов с помощью API Windows Shell. Функция используется в сочетании с функцией GetDefaultBrowser, которая пытается определить умолчательный браузер, создавая временный файл и вызывая FindExecutable. Путь к умолчательному браузеру преобразуется в длинное имя файла с помощью LongPathName.

Вот некоторые предложения по улучшению кода:

  • В Методе 1 вместо создания временного файла можно использовать функцию SHOpenCommandAndConduit из API Windows Shell для открытия умолчательного браузера без создания временного файла.
  • В Методе 2 нужно проверить, существует ли ключ реестра перед попыткой доступа к нему. Это можно сделать с помощью функции RegKeyExists из модуля Registry.
  • В Методе 3 можно использовать функцию SHGetFolderPath из API Windows Shell для получения пути к рабочему столу или папке документов, что может быть более надежно, чем создание временного файла.

Вот пример модификации Метода 1 для использования SHOpenCommandAndConduit:

function GetDefaultBrowser: string;
var
  uri: WideString;
begin
  uri := 'file:///' + ExtractFileName('http://www.example.com');
  SHOpenCommandAndConduit(nil, nil, uri, 0, nil);
  Result := GetAppName(uri);
end;

Функция создает временный URI и использует SHOpenCommandAndConduit для открытия умолчательного браузера с этим URI. Путь к умолчательному браузеру затем получается с помощью функции GetAppName.

Как узнать браузер по умолчанию - статья описывает несколько способов для определения настроенного в системе браузера по умолчанию, включая использование функций Delphi и доступ к реестру.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Браузер ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-12 15:42:15/0.0040328502655029/0