Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.031 c
14-1089739669
Rouse_
2004-07-13 21:27
2004.08.01
Наследование компонента...


1-1090139012
Alex-21
2004-07-18 12:23
2004.08.01
Очистка текстового файла


1-1089791332
serg128
2004-07-14 11:48
2004.08.01
Как можно отследить создание файла в определенной директории?


4-1088053564
Pasha
2004-06-24 09:06
2004.08.01
Народ, подскажите плз. как мне дописать сводку к файлу


3-1089063526
Sir John
2004-07-06 01:38
2004.08.01
TclientDataSet и поля с autoincrement





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский