![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Браузер установленный по умолчанию [D7, Win95/98, WinXP]
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}
и запускай браузер сам (урла тперь параметр) и траблов не будет...