Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Браузер установленный по умолчанию [D7, Win95/98, WinXP]


Страницы:   1 2

killer ©   (2004-06-07 20:05:00) 

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


killer   (2004-06-16 14:09:00) [1]

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


evvcom   (2004-06-16 13:55:00) [2]

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


jack128   (2004-06-15 21:45:00) [3]


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

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


killer   (2004-06-12 15:35:00) [4]

help


killer   (2004-06-11 13:12:00) [5]

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


killer   (2004-06-10 23:21:00) [6]

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


DeadMeat   (2004-06-10 17:45:00) [7]

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

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


killer   (2004-06-10 12:54:00) [8]

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


killer   (2004-06-10 12:52:00) [9]

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


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

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

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


killer   (2004-06-09 20:01:00) [11]

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


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

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


nikkie   (2004-06-08 02:51:00) [13]

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

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


Mim1   (2004-06-08 02:39:00) [14]

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

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.


Mim1   (2004-06-08 02:32:00) [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.


nikkie   (2004-06-08 01:57:00) [16]

{* 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;


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

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


killer   (2004-06-07 22:11:00) [18]

ой... т.е. {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:08:00) [19]

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


GuAV   (2004-06-07 21:45:00) [20]

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо