Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.01;
Скачать: CL | DM;

Вниз

Браузер установленный по умолчанию   Найти похожие ветки 

 
killer ©   (2004-06-07 20:05) [0]

Как узнать какой браузер установленный по умолчанию?


 
YuRock   (2004-06-07 20:34) [1]

В реестре поищи соответствия расширений файлов программам (например, у меня легче всего найти строку "C:\Program Files\Opera7\opera.exe")


 
killer ©   (2004-06-07 20:39) [2]

а какие это расширения? наверно где-то есть просто путь к браузеру....


 
GuAV ©   (2004-06-07 20:53) [3]


> а какие это расширения?

.htm :)

> Как узнать какой браузер установленный по умолчанию?

А зачем? если нужно открыть URL, то и пиши URL в ShellExecute.


 
YuRock   (2004-06-07 20:53) [4]

> а какие это расширения

*.htm, *.html, *.ftp, ...

> наверно где-то есть просто путь к браузеру....

Ну а я что предлагаю искать? Поищи полный путь к браузеру, который у тебя "по умолчанию"!!! Например,
"C:\Program Files\Internet Explorer\IEXPLORE.EXE"
или
"C:\Program Files\Opera7\opera.exe"
или что у тебя там...


 
GuAV ©   (2004-06-07 20:57) [5]


> *.htm, *.html, *.ftp, ...

html, ftp, ...
пользовательская настройка:
HKEY_CURRENT_USER\Software\Classes\CLSID\{871C5380-42A0-1069-A2EA-08002B30309D}


 
killer ©   (2004-06-07 21:03) [6]

дело в том.... что мне надо открывать URL в новом окне.....

для IE я делаю так...
ShellExecute(0, nil, "about:blank", nil, nil, 1);
ShellExecute(0, nil, "http://delphimaster.ru", nil, nil, 1);

а вот для Оперы надо так...
ShellExecute(0, nil, "http://delphimaster.ru", nil, nil, 1);

т.к. в Опере тогда одно лишнее окно создается....
вот мне для этого и надо знать.... как открывать...:)))

а вот зачем эти разрешения искать в реесте, я что-то не пойму...


 
YuRock   (2004-06-07 21:26) [7]

> killer ©   (07.06.04 21:03) [6]
> вот зачем эти разрешения искать в реесте, я что-то не пойму...

Для того, чтобы решить вопрос темы, к-рый ты задал. Т.е. определить, какой браузер в системе используется по умолчанию.

> для IE я делаю так...
ShellExecute(0, nil, "about:blank", nil, nil, 1);
ShellExecute(0, nil, "http://delphimaster.ru", nil, nil, 1);


Что-то мне кажется, что одного ShellExecute(0, nil, "http://delphimaster.ru", nil, nil, 1); вполне хватит...


 
DeadMeat ©   (2004-06-07 21:33) [8]

> [6] killer ©   (07.06.04 21:03)
В реестре узнаешь полный путь в "главному" *.EXE файлу броузера, а по нему определишь какой из них стоит поумолчанию... Вот только если тебе попадётся чего-нибудь типа MyIexplore.exe чего будешь делать??
Короче [7]

---
...Death Is Only The Begining...


 
killer ©   (2004-06-07 21:43) [9]

YuRock Он тогда откроет страничку в текущем окне IE....


 
GuAV ©   (2004-06-07 21:45) [10]

Я понял причину такого странного поведения:
ShellExecute(0, nil, "http://delphimaster.ru", nil, nil, 1);
это запустит IE с парметром -nohome
посмотри:
HKEY_CURRENT_USER\Software\Classes\CLSID\{871C5380-42A0-1069-A2EA-08002B30309D}
и запускай браузер сам (урла тперь параметр) и траблов не будет...


 
killer ©   (2004-06-07 22:08) [11]

у меня в XP нету что-то HKEY_CURRENT_USER в реесте


 
killer ©   (2004-06-07 22:11) [12]

ой... т.е. {871C5380-42A0-1069-A2EA-08002B30309D}

есть

HKEY_CURRENT_USER\Software\Classes\CLSID\{15E7609C-5E10-432A-B468-B62476EC05D3}
HKEY_CURRENT_USER\Software\Classes\CLSID\{FEEDD590-4C05-4049-8768-4F5994B86454}

и все... больше нету...


 
killer ©   (2004-06-07 22:13) [13]

GuAV и что с ним делать если был бы?  Что там прописывать или чего???


 
nikkie ©   (2004-06-08 01:57) [14]

{* OpenBrowser (c) DMClient team, 2004 *}
procedure OpenBrowser(Handle: HWND; Url: String);
var
 CommandLine: String;
begin
 CommandLine := "";
 with TRegistry.Create do
   try
     RootKey := HKEY_CLASSES_ROOT;
     OpenKey("\http\shell\open\command", False);
     try
       CommandLine := ReadString("");
     finally
       CloseKey;
     end;
   finally
     Free;
   end;
 if (Pos("iexplore.exe", CommandLine) > 0) and (Pos("-nohome", CommandLine) > 0) then begin
   if ShellExecute(Handle, "open", "iexplore", PChar(""" + Url + """), nil, SW_SHOWNORMAL) <= 32 then
     RaiseLastOSError;
 end else begin
   if ShellExecute(Handle, "open", PChar(Url), nil, nil, SW_SHOWNORMAL) <= 32 then
     RaiseLastOSError;
 end;
end;


 
Mim1 ©   (2004-06-08 02:32) [15]

[14] nikkie ©   (08.06.04 01:57)

К стати при клике по ссылке, dmclient подвисает на время запуска броузера (что немотря на мощь компа смотрится некрасиво), может вынести этот код в поток?

PS броузер по умолчанию opera.

unit Unit2;

interface

uses
 Classes, Windows;

type
 TOpenBrowser = class(TThread)
 private
   FHandle: HWND;
   FUrl: String;
 protected
   procedure Execute; override;
 public
   constructor Create(aHandle: HWND; aUrl: String);
 end;

implementation

Uses Registry, ShellApi, SysUtils;

{ TOpenBrowser }

constructor TOpenBrowser.Create(aHandle: HWND; aUrl: String);
begin
 inherited Create(true);
 FreeOnTerminate := true;
 FHandle := aHandle;
 FUrl := aUrl;
 Resume;
end;

procedure TOpenBrowser.Execute;
var
CommandLine: String;
begin
CommandLine := "";
with TRegistry.Create do
  try
    RootKey := HKEY_CLASSES_ROOT;
    OpenKey("\http\shell\open\command", False);
    try
      CommandLine := ReadString("");
    finally
      CloseKey;
    end;
  finally
    Free;
  end;
if (Pos("iexplore.exe", CommandLine) > 0) and (Pos("-nohome", CommandLine) > 0) then begin
  if ShellExecute(FHandle, "open", "iexplore", PChar(""" + FUrl + """), nil, SW_SHOWNORMAL) <= 32 then
    RaiseLastOSError; // вот только имеются опасения относительно этой фенкции, насколько она потокобезопасна?
                      // может место нее заюзать windows.messagebox?
end else begin
  if ShellExecute(FHandle, "open", PChar(FUrl), nil, nil, SW_SHOWNORMAL) <= 32 then
    RaiseLastOSError;
end;
end;

procedure OpenBrowser(Handle: HWND; Url: String);
begin
 TOpenBrowser.Create(Handle,Url);
end;

end.


 
Mim1 ©   (2004-06-08 02:39) [16]

Прошу прощения, вот так красивее.

unit Unit2;

{* OpenBrowser (c) DMClient team, 2004 *}

interface

uses
 Windows;

procedure OpenBrowser(Handle: HWND; Url: String);

implementation

Uses Registry, ShellApi, SysUtils, Classes;

type
 TOpenBrowser = class(TThread)
 private
   FHandle: HWND;
   FUrl: String;
 protected
   procedure Execute; override;
 public
   constructor Create(aHandle: HWND; aUrl: String);
 end;

{ TOpenBrowser }

constructor TOpenBrowser.Create(aHandle: HWND; aUrl: String);
begin
 inherited Create(true);
 FreeOnTerminate := true;
 FHandle := aHandle;
 FUrl := aUrl;
 Resume;
end;

procedure TOpenBrowser.Execute;
var
CommandLine: String;
begin
CommandLine := "";
with TRegistry.Create do
  try
    RootKey := HKEY_CLASSES_ROOT;
    OpenKey("\http\shell\open\command", False);
    try
      CommandLine := ReadString("");
    finally
      CloseKey;
    end;
  finally
    Free;
  end;
if (Pos("iexplore.exe", CommandLine) > 0) and (Pos("-nohome", CommandLine) > 0) then begin
  if ShellExecute(FHandle, "open", "iexplore", PChar(""" + FUrl + """), nil, SW_SHOWNORMAL) <= 32 then
    RaiseLastOSError; // вот только имеются опасения относительно этой фенкции, насколько она потокобезопасна?
                      // может место нее заюзать windows.messagebox?
end else begin
  if ShellExecute(FHandle, "open", PChar(FUrl), nil, nil, SW_SHOWNORMAL) <= 32 then
    RaiseLastOSError;
end;
end;

procedure OpenBrowser(Handle: HWND; Url: String);
begin
 TOpenBrowser.Create(Handle,Url);
end;

end.


 
nikkie ©   (2004-06-08 02:51) [17]

ну ради такого медленного браузера можно и в отдельный поток вынести :))
IE запускается моментально...

RaiseLastOSError конечно безопасна. только exception, возбужденный в потоке, останется для пользователя незамеченным. поэтому надо ловить его в Execute и показывать сообщение об ошибке самостоятельно. если я ничего не путаю.


 
killer ©   (2004-06-09 20:00) [18]

А как еще можно определить протокол в Опере? В IE если URL задать такой "yandex.ru" то открывается без проблем.... а в Опере вылетает ошибка, надо "http://yandex.ru" там URL вводить...


 
killer ©   (2004-06-09 20:01) [19]

или это уже от самого браузера зависит? будет он загружать такой URL или нет.....?


 
DeadMeat ©   (2004-06-09 20:22) [20]

А ты всегда давай http://  Так надёжнее...

---
...Death Is Only The Begining...


 
killer ©   (2004-06-10 12:52) [21]

Всеже какой способ лучше? Первый (nikkie) или второй (Mim1)? Сам пробовал, работают оба... а какой из них лучше не знаю...


 
killer ©   (2004-06-10 12:54) [22]

DeadMeat а если это будет ftp://? Браузер переменит сам http:// на ftp://?


 
DeadMeat ©   (2004-06-10 17:45) [23]

Не ну если ftp:// дык указывай ftp://
Не надо полагаться на браузер...

---
...Death Is Only The Begining...


 
killer ©   (2004-06-10 23:21) [24]

DeadMeat дело в том что URL-адрес указывает пользователь.... так, что он может http:// или ftp:// вовсе не указать.... может по умолчанию http:// приписывать, если не указан протокол...?


 
killer ©   (2004-06-11 13:12) [25]

А еще я хотел спросить.... во втором примере есть "constructor" нужен ли ему "destructor"? ведь как это все из памяти удалится?


 
killer ©   (2004-06-12 15:35) [26]

help


 
jack128 ©   (2004-06-15 21:45) [27]


>  ведь как это все из памяти удалится?

само. ибо > FreeOnTerminate := true;


 
evvcom ©   (2004-06-16 13:55) [28]

По-моему, IE автоматом подставляет http:// для всех случаев, когда не указан явно протокол, кроме случая, если адрес выглядит примерно так ftp.server.ru. Для такого адреса подставляется ftp://. Возможно есть и другие предопределенные имена, закрепленные за протоколом (www закреплен за http://).
Можно реализовать по такому алгоритму.


 
killer ©   (2004-06-16 14:09) [29]

А какой способ лучше, я так и не понял.... первый (nikkie) или второй (Mim1)?



Страницы: 1 вся ветка

Текущий архив: 2004.08.01;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.054 c
8-1084885435
Iraizor
2004-05-18 17:03
2004.08.01
ошибка после завершения приложения работающего с канвой


1-1090212946
Valeri
2004-07-19 08:55
2004.08.01
Image


1-1090118995
НовиЧок
2004-07-18 06:49
2004.08.01
Поиск текста


14-1089944676
StarCon
2004-07-16 06:24
2004.08.01
Дельфи 8


14-1089822555
Мазут Береговой
2004-07-14 20:29
2004.08.01
Где можно скачать Metallica.