C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
ShellExecute — новое окно браузера
Aptem
  Отправлено: 26.01.2004, 21:06


Мастер участка

Группа: Участник
Сообщений: 349



Привет, Всем!

У меня в программе есть такой код:
CODE
ShellExecute ( NULL, "open", "preview.htm", NULL, NULL, SW_SHOWDEFAULT );


Эта команда открывает окно браузера и загружает туда файл preview.htm. Если, предположим, что окно уже открыто, то новое окно не создается, а содержимое файла загружается именно в это окно. Как создать "настоящее новое" окно? Может какие-нибудь параметры в функции поменять?

Спасибо за внимание!
Gedeon
Отправлено: 27.01.2004, 15:42


Ветеран

Группа: Модератор
Сообщений: 1742



ShellExecute() тут не поможет, используй CreateProcess()
Aptem
Отправлено: 27.01.2004, 16:46


Мастер участка

Группа: Участник
Сообщений: 349



QUOTE (Gedeon @ 27/01/2004, 16:44)
ShellExecute() тут не поможет, используй CreateProcess()

Спасибо за ответ! Но, как именно его использовать?
Gedeon
Отправлено: 27.01.2004, 17:35


Ветеран

Группа: Модератор
Сообщений: 1742



Билдера на новой2 работе пока нет, поэтому совет такой F1 и в индексах набираешь нужное тебе слово, или поиск.
Snake
Отправлено: 27.01.2004, 18:32


Ученик-кочегар

Группа: Участник
Сообщений: 22



QUOTE (Aptem @ 26/01/2004, 22:08)
У меня в программе есть такой код:
CODE
ShellExecute ( NULL, "open", "preview.htm", NULL, NULL, SW_SHOWDEFAULT );


Эта команда открывает окно браузера и загружает туда файл preview.htm. Если, предположим, что окно уже открыто, то новое окно не создается, а содержимое файла загружается именно в это окно. Как создать "настоящее новое" окно? Может какие-нибудь параметры в функции поменять?

Может, подойти к проблеме с другой стороны и формировать html-файл с уникальным (временным) именем?
Aptem
Отправлено: 27.01.2004, 19:47


Мастер участка

Группа: Участник
Сообщений: 349



А что это даст...уникальное(временное) имя?
Snake
Отправлено: 28.01.2004, 10:55


Ученик-кочегар

Группа: Участник
Сообщений: 22



QUOTE (Aptem @ 27/01/2004, 20:49)
А что это даст...уникальное(временное) имя?

Каждый раз по ShellExecute будет открываться новое окно браузера.

Может, я чего-то не понимаю, объясни подробней, для чего тебе это нужно.
Aptem
Отправлено: 28.01.2004, 12:50


Мастер участка

Группа: Участник
Сообщений: 349



QUOTE (Snake @ 28/01/2004, 11:57)
QUOTE (Aptem @ 27/01/2004, 20:49)
А что это даст...уникальное(временное) имя?

Каждый раз по ShellExecute будет открываться новое окно браузера.

Может, я чего-то не понимаю, объясни подробней, для чего тебе это нужно.

Объясняю подробнее:

У меня есть приложение, в котором я формирую HTML-код. Есть кнопка "Предпросмотр", по действию которой, происходит сохранение этого HTML-кода в файл "preview.htm", а затем через ShellExecute я запускаю этот файл, открывается окно браузера и все вроде бы нормально...

Теперь представим такую ситуацию:

Предположим, что у меня открыто несколько окон браузера ( допустим, что я только что проверял почту, сообщения в форуме и мало ли чего еще... ). Если теперь запустить мое приложение и нажать кнопку "Предпросмотр", то новое окно уже не появится, а выбирется одно из уже имеющихся окон и туда загрузится страница. Так вот в чем проблема: я хочу, чтобы открывалось новое окно браузера, даже если уже есть открытые окна.

Думаю, теперь понятно.
Snake
Отправлено: 29.01.2004, 12:31


Ученик-кочегар

Группа: Участник
Сообщений: 22



QUOTE (Aptem @ 28/01/2004, 13:52)
У меня есть приложение, в котором я формирую HTML-код. Есть кнопка "Предпросмотр", по действию которой, происходит сохранение этого HTML-кода в файл "preview.htm", а затем через ShellExecute я запускаю этот файл, открывается окно браузера и все вроде бы нормально...

Теперь представим такую ситуацию:

Предположим, что у меня открыто несколько окон браузера ( допустим, что я только что проверял почту, сообщения в форуме и мало ли чего еще... ). Если теперь запустить мое приложение и нажать кнопку "Предпросмотр", то новое окно уже не появится, а выбирется одно из уже имеющихся окон и туда загрузится страница. Так вот в чем проблема: я хочу, чтобы открывалось новое окно браузера, даже если уже есть открытые окна.

Действительно, я немного не так понял вопрос.cool.gif

У меня тоже есть подобное приложение и работает, как надо тебе. Но, при соблюдении 2-х условий: каждый HTML-файл под уникальным именем и в MSIE 6.0 (мой браузер по умолчанию) не установлено "Использовать одно и то же окно для загрузки ярлыков".

Чтобы открывать окно при любых установках MSIE -- нужно использовать MSIE как COM-сервер (в деталях не разбирался).

Я вижу 3 варианта:
- В браузере по-умолчанию установить, чтобы открывать ярлыки в новом окне. Если пользователь изменил настройки -- значит, так ему больше нравится.
- Открывать всегда в MSIE, всегда в новом окне. Довольно жестко, но будет всегда работать.
- Открывать в программе при помощи CppWebBrowser.


P.S. Посмотрел свой код, у меня:
ShellExecute(GetDesktopWindow(), "Open", file.c_str(), NULL, NULL, SW_SHOWNORMAL)

Почему именно так -- не помню, давно писалось...
Попробуй, на всякий случай.

Aptem
Отправлено: 29.01.2004, 18:35


Мастер участка

Группа: Участник
Сообщений: 349



QUOTE (Snake @ 29/01/2004, 13:33)
P.S. Посмотрел свой код, у меня:
ShellExecute(GetDesktopWindow(), "Open", file.c_str(), NULL, NULL, SW_SHOWNORMAL)

Почему именно так -- не помню, давно писалось...
Попробуй, на всякий случай.

Это не помогло, а вот про свойства браузера я не подумал. Убрал оттуда галочку и все заработало... Огромное спасибо !

Вернуться в Вопросы программирования в C++Builder