Форум: "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.52 MB
Время: 0.033 c