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

 
Закрытие приложения, IE не закрывается
Allin
Отправлено: 14.11.2005, 18:55


Дежурный стрелочник

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



Такая возникла проблема.

Вот открываю я, напрмер страницу в интернете через браузер.
CODE
ShellExecute(Handle,"open",i,NULL,NULL,SW_RESTORE);


AnsiString i = "адрес страницы";

Всё открывает, хорошо.

А вот для того, чтобы закрыть это окно и сам браузер (в моём случае IE)?
Через WinSight32 определил имя класса.

Пишу:
CODE
SendMessage(FindWindow("IEFrame","Заголовок страницы"),WM_CLOSE,0,0);


В итоге закрытия IE не происходит. И ошибки никакой нет. Всё чинно — благородно. В чём моя ошибка?
Gedeon
Отправлено: 14.11.2005, 19:57


Ветеран

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



Попробуйте так:
CODE

SendMessage(FindWindow("IEFrame","Заголовок страницы"),WM_SYSCOMMAND,SC_CLOSE,0);
Allin
Отправлено: 14.11.2005, 20:09


Дежурный стрелочник

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



Странно, но не получается. всё равно не закрывается. Причём увидел следующее: не закрывается только IE.
Например открыв новый документ Word, по команде:

CODE
SendMessage(FindWindow("OpusApp","Документ1 — Microsoft Word"),WM_CLOSE,0,0);


Word "говорит досвидания" и послушно закрывается.

А IE и:

CODE
SendMessage(FindWindow("IEFrame","Открытая страница — Microsoft Internet Explorer"),WM_SYSCOMMAND,SC_CLOSE,0);


попрежнему гордо игнорирует. Типа он Круче всех программ и чтоб я не дотрагивался до него своими лапами.

Отредактировано Allin — 14/11/2005, 20:10
Gedeon
Отправлено: 15.11.2005, 16:32


Ветеран

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



У меня мой вариант работает, Ваш — нет.
Проверьте на пустом, без страниц
CODE

SendMessage(FindWindow("IEFrame","about:blank — Microsoft Internet Explorer"),WM_SYSCOMMAND,SC_CLOSE,0);

Ну а дальше берите spy++ и изучайте сообщения. Неплохо бы убедиться, что окно найдено правильно, я например так не пишу никогда, сначала поиск окна, проверка хэндла, а потом уж посылка сообщения.
GIZMO
Отправлено: 15.11.2005, 19:21


Машинист паровоза

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



QUOTE (Allin @ 14/11/2005, 18:55)
Такая возникла проблема.

Вот открываю я, напрмер страницу в интернете через браузер.
CODE
ShellExecute(Handle,"open",i,NULL,NULL,SW_RESTORE);


AnsiString i = "адрес страницы";

Всё открывает, хорошо.

А вот для того, чтобы закрыть это окно и сам браузер (в моём случае IE)?
Через WinSight32 определил имя класса.

Пишу:
CODE
SendMessage(FindWindow("IEFrame","Заголовок страницы"),WM_CLOSE,0,0);


В итоге закрытия IE не происходит. И ошибки никакой нет. Всё чинно — благородно. В чём моя ошибка?

А почему-бы его не запускать сразу "по-русски":
CODE

...
IWebBrowser2* pWebBrowser = NULL;
VARIANT vURL = {0}, vDummy = {0};

CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_SERVER, IID_IWebBrowser2, (LPVOID*)&pWebBrowser);

pWebBrowser->put_Visible(VARIANT_TRUE);
//pWebBrowser->put_Width(width);
//pWebBrowser->put_Height(height);

pWebBrowser->Navigate2(&vURL, &vDummy, &vDummy, &vDummy, &vDummy);
...

т.е. указатель есть и IE будет делать все, что пожелаешь (только за пивом не пойдет sad.gif )
ну поработал и pWebBrowser->Quit();


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