Запуск бровзера по умолчанию в новом окне.
От: tdv  
Дата: 30.11.01 22:43
Оценка:
Почти все знают как из программы запустить бровзер и передать ему ссылку используя ShellExecute,
но во вопрос, как заставить делать это каждый раз в новом окне ?
Re: Запуск бровзера по умолчанию в новом окне.
От: sasha Грузия  
Дата: 01.12.01 08:29
Оценка:
Здравствуйте tdv, Вы писали:

tdv> во вопрос, как заставить делать это каждый раз в новом окне ?


Во ответ:
STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

CreateProcess( NULL, "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE www.sciam.com",
NULL, NULL, FALSE, 0,
NULL, NULL, &si, &pi );

Сорри, что не с помощью ShellExecute, но ведь работает
Re[2]: Запуск бровзера по умолчанию в новом окне.
От: Alex Fedotov США  
Дата: 01.12.01 09:05
Оценка:
Здравствуйте sasha, Вы писали:

S>Сорри, что не с помощью ShellExecute, но ведь работает


И не браузер по умолчанию.
-- Alex Fedotov
Re[3]: Запуск бровзера по умолчанию в новом окне.
От: sasha Грузия  
Дата: 01.12.01 09:38
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

AF>Здравствуйте sasha, Вы писали:


S>>Сорри, что не с помощью ShellExecute, но ведь работает


AF>И не браузер по умолчанию.


Чтож, жизнь не сахар — придеться откопать в реестре ассоциацию для html файлов
Тем более, что это не убийственно сложно
Re[4]: Запуск бровзера по умолчанию в новом окне.
От: vladsm Россия  
Дата: 06.12.01 10:04
Оценка:
Здравствуйте sasha, Вы писали:

S>Чтож, жизнь не сахар — придеться откопать в реестре ассоциацию для html файлов :user:

S>Тем более, что это не убийственно сложно :crash:

Что жизнь не сахар — это я понял, когда стал тестировать код с ShellExecute на машине у которой установлен только Netscape Communicator 4.5. Так вот там ShellExecute не заработала.
Вызов:
ShellExecute(GetSafeHwnd(),"open","http://rsdn.ru",NULL,NULL,SW_SHOWMAXIMIZED);

Т.е. посылается не ссылка на файл, а URL. Кроме того, когда в Start->Run набираю "http://rsdn.ru" тоже ничего не происходит. А должно бы. Так что Netscape себя недостаточно хорошо устанавливает и прописывает в реестре?
Теперь уж бог с ним, с одним окном, вообще бы запустить браузер по умолчанию :-(
Re[5]: Запуск бровзера по умолчанию в новом окне.
От: TSS Россия http://www.sdl.ru
Дата: 06.12.01 10:12
Оценка:
Здравствуйте vladsm, Вы писали:

S>>Чтож, жизнь не сахар — придеться откопать в реестре ассоциацию для html файлов

S>>Тем более, что это не убийственно сложно

V>Что жизнь не сахар — это я понял, когда стал тестировать код с ShellExecute на машине у которой установлен только Netscape Communicator 4.5. Так вот там ShellExecute не заработала.

V>Вызов:
V>
V>ShellExecute(GetSafeHwnd(),"open","http://rsdn.ru",NULL,NULL,SW_SHOWMAXIMIZED);
V>

V>Т.е. посылается не ссылка на файл, а URL. Кроме того, когда в Start->Run набираю "http://rsdn.ru" тоже ничего не происходит. А должно бы. Так что Netscape себя недостаточно хорошо устанавливает и прописывает в реестре?
V>Теперь уж бог с ним, с одним окном, вообще бы запустить браузер по умолчанию

ShellExecute работает только потому, что в реестре есть такая запись (это кусок реестра, выделенные места -- оно и есть:
REGEDIT4

[HKEY_CLASSES_ROOT\http]
"Source Filter"="{E436EBB6-524F-11CE-9F53-0020AF0BA770}"
@="URL:╧Протокол HTTP"
"EditFlags"=dword:00000002
"URL Protocol"=""

[HKEY_CLASSES_ROOT\http\AnimExtensions]
"."="dxmasf.dll,150"
".asf"="dxmasf.dll,150"
".asp"="dxmasf.dll,150"
".asx"="dxmasf.dll,150"
".nsc"="dxmasf.dll,150"
".ra"="dxmasf.dll,150"
".ram"="dxmasf.dll,150"
".rm"="dxmasf.dll,150"
".rmm"="dxmasf.dll,150"
".wax"="dxmasf.dll,150"
".wm"="dxmasf.dll,150"
".wma"="dxmasf.dll,150"
".wmv"="dxmasf.dll,150"
".wvx"="dxmasf.dll,150"

[HKEY_CLASSES_ROOT\http\DefaultIcon]
@=hex(2):25,53,79,73,74,65,6d,52,6f,6f,74,25,5c,73,79,73,74,65,6d,33,32,5c,75,  72,6c,2e,64,6c,6c,2c,30,00

[HKEY_CLASSES_ROOT\http\Extensions]
".ASF"="{6B6D0800-9ADA-11d0-A520-00A0D10129C0}"
".ASX"="{4B428940-263C-11d1-A520-000000000000}"
".ASP"="{4B428940-263C-11d1-A520-000000000000}"
".WAX"="{4B428940-263C-11d1-A520-000000000000}"
".WM"="{6B6D0800-9ADA-11d0-A520-00A0D10129C0}"
".WMA"="{6B6D0800-9ADA-11d0-A520-00A0D10129C0}"
".NSC"="{4B428940-263C-11d1-A520-000000000000}"
".BECK"="{6B6D0800-9ADA-11d0-A520-00A0D10129C0}"
".WVX"="{4B428940-263C-11d1-A520-000000000000}"
".WMV"="{6B6D0800-9ADA-11d0-A520-00A0D10129C0}"
".IVF"="{C69E8F40-D5C8-11D0-A520-145405C10000}"

[HKEY_CLASSES_ROOT\http\shell]

[HKEY_CLASSES_ROOT\http\shell\open]

[HKEY_CLASSES_ROOT\http\shell\open\command]
@="\"D:\\Program Files\\Internet Explorer\\iexplore.exe\" -nohome"

[HKEY_CLASSES_ROOT\http\shell\open\ddeexec]
@="\"%1\",,-1,0,,,,"
"NoActivateHandler"=""

[HKEY_CLASSES_ROOT\http\shell\open\ddeexec\Application]
@="IExplore"

[HKEY_CLASSES_ROOT\http\shell\open\ddeexec\Topic]
@="WWW_OpenURL"
Signed, [TSS] /SDL/
Re[6]: Запуск бровзера по умолчанию в новом окне.
От: Аноним  
Дата: 06.12.01 10:49
Оценка:
Здравствуйте TSS, Вы писали:

TSS>ShellExecute работает только потому, что в реестре есть такая запись (это кусок реестра, выделенные места -- оно и есть:

TSS>
TSS>REGEDIT4

TSS>[HKEY_CLASSES_ROOT\http]
TSS>"Source Filter"="{E436EBB6-524F-11CE-9F53-0020AF0BA770}"
TSS>@="URL:╧Протокол HTTP"
TSS>"EditFlags"=dword:00000002

А EditFlags - это что?


TSS>[HKEY_CLASSES_ROOT\http\shell]

TSS>[HKEY_CLASSES_ROOT\http\shell\open]

TSS>[HKEY_CLASSES_ROOT\http\shell\open\command]
TSS>@="\"D:\\Program Files\\Internet Explorer\\iexplore.exe\" -nohome"

TSS>[HKEY_CLASSES_ROOT\http\shell\open\ddeexec]
TSS>@="\"%1\",,-1,0,,,,"
TSS>"NoActivateHandler"=""

TSS>[HKEY_CLASSES_ROOT\http\shell\open\ddeexec\Application]
TSS>@="IExplore"

TSS>[HKEY_CLASSES_ROOT\http\shell\open\ddeexec\Topic]
TSS>@="WWW_OpenURL"
TSS>


А у меня HKEY_CLASSES_ROOT\http\shell выглядит так:

REGEDIT4

[HKEY_CLASSES_ROOT\http]
@="URL: http Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\http\shell]

[HKEY_CLASSES_ROOT\http\shell\open]

[HKEY_CLASSES_ROOT\http\shell\open\command]
@="C:\\PROGRA~1\\NETSCAPE\\COMMUN~1\\PROGRAM\\NETSCAPE.EXE \"%1\""

И ничего SE не работает. Еще что то надо? И почему, если надо, Netscape это не прописал? Это только у меня так?
Re[7]: Запуск бровзера по умолчанию в новом окне.
От: TSS Россия http://www.sdl.ru
Дата: 06.12.01 11:00
Оценка:
Здравствуйте Аноним, Вы писали:

[skipped]

А>И ничего SE не работает. Еще что то надо? И почему, если надо, Netscape это не прописал? Это только у меня так?


Это вопрос к разработчикам Нетшкафа.
Если разрабатываешь прогу "для народа" -- поиграйся с вышеуказанным .reg и в инсталлере пропиши что и как нужно сделать с реестром...
Это раз. Второе. Рекомендую поискать (я уже просто не помню ), где в реестре написано про default browser и прописать его вместо iexplore.exe...
Signed, [TSS] /SDL/
Re[8]: Запуск бровзера по умолчанию в новом окне.
От: sasha Грузия  
Дата: 06.12.01 11:14
Оценка:
Здравствуйте TSS, Вы писали:

TSS>Рекомендую поискать (я уже просто не помню ), где в реестре написано про default browser.


В реестре нет записи специально для default browser. Но если вдруг вспомнится, напиши, чтоб мне дольше не находиться в позорном заблуждении.
А найти можно и так:
HKEY_CLASSES_ROOT\htmlfile\shell\open\command
Re[8]: Запуск бровзера по умолчанию в новом окне.
От: vladsm Россия  
Дата: 06.12.01 11:19
Оценка:
Здравствуйте TSS, Вы писали:

TSS>Это вопрос к разработчикам Нетшкафа.


А у других то как с этим?

TSS>Если разрабатываешь прогу "для народа" -- поиграйся с вышеуказанным .reg и в инсталлере пропиши что и как нужно сделать с реестром...


Так надо то все таки запускать default'ный браузер...

TSS>Второе. Рекомендую поискать (я уже просто не помню ), где в реестре написано про default browser и прописать его вместо iexplore.exe...


Да я уже искал — не удачно. Может подскажете какие-нибудь ключевые слова, или еще какую-нибудь зацепку?
Re[9]: Запуск бровзера по умолчанию в новом окне.
От: vladsm Россия  
Дата: 06.12.01 11:28
Оценка:
Здравствуйте sasha, Вы писали:

S>А найти можно и так:

S>HKEY_CLASSES_ROOT\htmlfile\shell\open\command

Так это запись для файла-html, а надо не так (см. выше). А то что прописано для html-файлов может не совпадать с тем браузером, который откроет URL после
ShellExecute(...,"http://rsdn.ru",...).
Re[9]: Запуск бровзера по умолчанию в новом окне.
От: TSS Россия http://www.sdl.ru
Дата: 06.12.01 11:34
Оценка: 1 (1)
Здравствуйте vladsm, Вы писали:

TSS>>Второе. Рекомендую поискать (я уже просто не помню ), где в реестре написано про default browser и прописать его вместо iexplore.exe...


V>Да я уже искал — не удачно. Может подскажете какие-нибудь ключевые слова, или еще какую-нибудь зацепку?


Я тута пальцем покопался... на MSDN и выкопал статью:
Q174156: HOWTO: Programmatically Launch the Default Internet Browser (http://support.microsoft.com/support/kb/articles/Q174/1/56.ASP)
К сожалению для VB, но все что можно на VB, можно и на VC++
Signed, [TSS] /SDL/
Re[10]: Запуск бровзера по умолчанию в новом окне.
От: sasha Грузия  
Дата: 06.12.01 11:45
Оценка:
Здравствуйте TSS, Вы писали:

TSS>Здравствуйте vladsm, Вы писали:


TSS>>>Второе. Рекомендую поискать (я уже просто не помню ), где в реестре написано про default browser и прописать его вместо iexplore.exe...


V>>Да я уже искал — не удачно. Может подскажете какие-нибудь ключевые слова, или еще какую-нибудь зацепку?


TSS>Я тута пальцем покопался... на MSDN и выкопал статью:

TSS>Q174156: HOWTO: Programmatically Launch the Default Internet Browser (http://support.microsoft.com/support/kb/articles/Q174/1/56.ASP)
TSS>К сожалению для VB, но все что можно на VB, можно и на VC++

Так это же просто переписанный на VB код запуска ShellExecute. А где поиск браузера по умолчанию?
Re[10]: Запуск бровзера по умолчанию в новом окне.
От: vladsm Россия  
Дата: 06.12.01 11:47
Оценка:
TSS>Я тута пальцем покопался... на MSDN и выкопал статью:
TSS>Q174156: HOWTO: Programmatically Launch the Default Internet Browser (http://support.microsoft.com/support/kb/articles/Q174/1/56.ASP)
TSS>К сожалению для VB, но все что можно на VB, можно и на VC++

Как у нас говорится — пасибочки. Почитаю...
Re[11]: Запуск бровзера по умолчанию в новом окне.
От: TSS Россия http://www.sdl.ru
Дата: 06.12.01 11:53
Оценка:
Здравствуйте sasha, Вы писали:

TSS>>Я тута пальцем покопался... на MSDN и выкопал статью:

TSS>>Q174156: HOWTO: Programmatically Launch the Default Internet Browser (http://support.microsoft.com/support/kb/articles/Q174/1/56.ASP)
TSS>>К сожалению для VB, но все что можно на VB, можно и на VC++

S>Так это же просто переписанный на VB код запуска ShellExecute. А где поиск браузера по умолчанию?


См. код внимательно. Особенно на FindExecutable().
А трюк достаточно приколен -- создаеться пустой .htm файл, потом ищеться приложение, ассоциированное с .htm-файлам. Оно-то, как раз, и являеться браузером по умолчанию. Точно также, по идее, ищеться и почтовик по умолчанию (ассоциация для .eml), NEWS-ридер (ассоциация для .news)... А вот редактор прописан в HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Default HTML Editor.
Signed, [TSS] /SDL/
Re[12]: Запуск бровзера по умолчанию в новом окне.
От: vladsm Россия  
Дата: 06.12.01 12:03
Оценка:
Здравствуйте TSS, Вы писали:

TSS>А трюк достаточно приколен -- создаеться пустой .htm файл, потом ищеться приложение, ассоциированное с .htm-файлам. Оно-то, как раз, и являеться браузером по умолчанию.


Ну вот, опять htm-файл. Это не тоже самое, когда в командной строке исполняешь "http://rsdn.ru". А уж связь с htm'ом и в реестре посмотреть можно.
Re[13]: Запуск бровзера по умолчанию в новом окне.
От: TSS Россия http://www.sdl.ru
Дата: 06.12.01 12:09
Оценка:
Здравствуйте vladsm, Вы писали:

V>Здравствуйте TSS, Вы писали:


TSS>>А трюк достаточно приколен -- создаеться пустой .htm файл, потом ищеться приложение, ассоциированное с .htm-файлам. Оно-то, как раз, и являеться браузером по умолчанию.


V>Ну вот, опять htm-файл. Это не тоже самое, когда в командной строке исполняешь "http://rsdn.ru". А уж связь с htm'ом и в реестре посмотреть можно.


Именно "не тоже самое" !
Есть понятие "URL scheme", имхо EditFlags в реестре за него и отвечает.

А посмотреть действительно можно. Только надобно из ".htm" выявить default value, потом дальше пойти гулять по htmlfile/shell/command ... проще через FindExecutable() -- она этим и занимаеться.
Signed, [TSS] /SDL/
Re[12]: Запуск бровзера по умолчанию в новом окне.
От: sasha Грузия  
Дата: 06.12.01 12:12
Оценка:
Здравствуйте TSS, Вы писали:

TSS>Здравствуйте sasha, Вы писали:


S>>Так это же просто переписанный на VB код запуска ShellExecute. А где поиск браузера по умолчанию?


TSS>См. код внимательно. Особенно на FindExecutable().

TSS>А трюк достаточно приколен -- создаеться пустой .htm файл, потом ищеться приложение, ассоциированное с .htm-файлам. Оно-то, как раз, и являеться браузером по умолчанию. Точно также, по идее, ищеться и почтовик по умолчанию (ассоциация для .eml), NEWS-ридер (ассоциация для .news)... А вот редактор прописан в HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Default HTML Editor.

Нее, это понятно, просто разговор был о прямом поиске в реестре.
Re[13]: Запуск бровзера по умолчанию в новом окне.
От: TSS Россия http://www.sdl.ru
Дата: 06.12.01 12:16
Оценка:
Здравствуйте sasha, Вы писали:

S>Нее, это понятно, просто разговор был о прямом поиске в реестре.


А зачем, если в системе есть более простой и "портабельный" способ ?
Кстати, есть ещё и
HRESULT AssocQueryString(
    ASSOCF flags, 
    ASSOCSTR str, 
    LPCTSTR pszAssoc, 
    LPCTSTR pszExtra, 
    LPTSTR pszOut, 
    DWORD *pcchOut
);

но ей нужен пятый ослик... Она, по виду, самая крутая
Signed, [TSS] /SDL/
Re: Запуск бровзера по умолчанию в новом окне.
От: DNS Россия  
Дата: 06.12.01 14:09
Оценка:
Здравствуйте tdv, Вы писали:

tdv>Почти все знают как из программы запустить бровзер и передать ему ссылку используя ShellExecute,

tdv>но во вопрос, как заставить делать это каждый раз в новом окне ?

Есть вариант, но корявенький.
Перед запуском ShellExecute надо попортить\удалить запись в реестре на нужный протокол (http для примера) в разделе реестра HKCR\http\shell\ddeexec\Application чтобы браузер не смог ответить на dde-мессагу, которую пошлёт ShellExecute, и тогда запустит новое приложение.
После всего восстанавливаешь запись в реестре.

Как вариант?


Успехов!
Д.Н.С.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.