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 будет делать все, что пожелаешь (только за пивом не пойдет )
ну поработал и pWebBrowser->Quit();
|
|
|