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

 
Получение текущих URL'a и заголовка окна браузера
BreakPointMAN
Отправлено: 01.06.2006, 17:24


Станционный диспетчер

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



Получение текущего URL и текущего заголовка окна в браузерах. Насколько я понял, существует три основных способа решения данной задачи:



1) Извращения с окнами
Очень ненадежный метод, с которым даже не хочется связываться. Заключается в том, чтобы находить буквально "вручную" нужные окна с помощью WinAPI-функций FindWindow, GetWindow и пр., а затем получать необходимую информацию с помощью функции GetWindowText, посылки сообщения WM_GETTEXT и т.д. Зачастую нужно знать классы окон и их tab-последовательность, причем не факт, что ни то, ни другое не изменится в следующих версиях браузеров, да и что будет, например, если я возьму и сотру адрес из поля ввода? smile.gif



2) DDE

Большинство браузеров являются DDE-серверами. Чтобы получить текущий URL, клиент должен установить соединение с сервером на тему (Topic) "WWW_GetWindowInfo" и выполнить запрос элемента данных (Item) "0xFFFFFFFF", результатом такого запроса будет строка c текущими адресом и заголовком окна:
QUOTE
"http://www.yandex.ru/","Яндекс",""

Не очень удобно сделано, потому что потом эту строку еще нужно делить на составные части... Хорошо хоть, что они заключены в кавычки и разделены запятыми... но лучше, наверное, было бы, чтобы они передавались по-отдельности, или заключались в такие символы-разделители, которые не могут встретиться ни в адресе, ни в заголовке окна... Не знаю, могут ли встречаться кавычки и запятые в адресе, но в заголовке точно могут. Как отсюда корректно вырезать и то, и другое? Кстати, что за третья пустая строка, быть может, кто-нибудь знает? Она присутствует не всегда и не для всех браузеров...

Ну, а код на C++ Builder(в котором я пишу) будет выглядить примерно так:

CODE
DdeClientConv1->SetLink("IExplore","WWW_GetWindowInfo");
Edit1->Text = AnsiString(DdeClientConv1->RequestData("0xFFFFFFFF"));
DdeClientConv1->CloseLink();


Вместо "IExplore" может, например, быть "Firefox" или "Mozilla" или "Opera"...
Теперь достаточно кинуть на форму TDdeClientConv и TEdit и прописать где нужно, данный код.

3) COM
А вот здесь, пока, полный мрак... Хотелось бы разобраться с тем, как можно выполнять те же самые задачи с помощью COM-технологии. Какие из браузеров ее поддерживают? Как это можно реализовать на C++ Builder? Приветствуются любые ссылки по теме.
GIZMO
Отправлено: 02.06.2006, 14:06


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

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



QUOTE (BreakPointMAN @ 01/06/2006, 17:24)
3) COM
А вот здесь, пока, полный мрак... Хотелось бы разобраться с тем, как можно выполнять те же самые задачи с помощью COM-технологии. Какие из браузеров ее поддерживают? Как это можно реализовать на C++ Builder? Приветствуются любые ссылки по теме.

IE(DHTML), FireFox(FireFoxACtiveX)

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