Возникло непреодолимое желание получить доступ к отдельным элементам контента в браузере (для простоты берем массовые IE7,8 и FF3). Цель - возможность поиска нужного текста на уже загруженной странице и его изменение. С помощью UiSpy установлено, что каждый отдельный блок загруженного контента в этих браузерах представлены в виде отдельных контролов, например html код "Привет, <h1>Вася</h1>" образует два контрола ControlType.Text - "Привет, " и "Вася". Для картинок и таблиц тип контролов другой, но общий смысл тот же. Вопрос в том, как получить к ним доступ, чтобы хотя бы просто прочитать текст. Казалось бы задача тривиальная, берем главное окно, от него EnumChildWindows, getWindowText или аналог на нужном элементе и все, но... последним доступным окном в иерархии на пути к нашим контролам является общее окно с именем класса MozillaWindowClass для FF3 и Internet Explorer_Server для IE8, а дальше, в "глубину", по мнению Spy++, UiSpy и просто GetWindow c GW_HWNDFIRST, окон вроде как и нет! UiSpy для IE7,8 и FF показывает, что элементы в иерархии есть, но у них нет ни имени класса, ни оконного хэндла. (Для Opera и Chrome еще хуже, там просмотр иерархии элементов вообще останавливается на общем окне.) Можно ли как-то взаимодействовать с этими отдельными элементами? Чувствую, что есть какой-то простой универсальный способ, но пока не могу найти. Использовать путь через подключение тулбаров и расширений не хотелось бы, перехватывать данные до входа в браузер тоже не выход, т.к. там может и https быть и джаваскрипт закриптованый, а хотелось бы иметь возможность работать с тем, что уже отрендерил браузер.
Универсального способа нет и не может быть, т.к. контролы в современных приложениях не являются окнами windows. Для конкретных браузеров есть свои способы, например, плагины. Для IE можно обойтись без BHO: http://www.rsdn.ru/article/qna/inet/enumexp.xml (UiSpy умеет использовать Automation, потому ты видишь контролы в IE)
Gnil Для браузеров, как оказалось, есть. LittleJohn Я недавно задавал подобный вопрос http://wasm.ru/forum/viewtopic.php?id=35408 Приемлимым вариантом оказалась работа с интерфейсом IAccessible.
COM для IE достаточно в MSDN все нормально написано, погляди еще тему на Codeproject мне помогло (кстате есть либа которая реализует окно IE на чистом COM, без всяких MFC и ATL, что мне очень пригодилось) Для FF - XCOM поидее, только работать с ним непонятно как, можешь посмотреть либу на kirix.com , вернее ее исходники, там работа с xulrunner, считай с фоксом карманным.
Покрутил доступ через IAccessible, для чтения элементов отличная вещь, можно через дерево иерархии нужные контролы перебрать, можно по конкретным координатам выдернуть элемент. Работает для IE7,8 и для FireFox3. А вот с доступом на запись хуже, изменять можно только параметр Value и только для элементов ввода, т.е. записать свой текст просто куда-нибудь в середину абзаца или поменять url для ссылки уже не получается. От наличия администраторского доступа это не зависит, от того, свое окно или чужое, тоже. Как все-таки можно добратся до редактирования в полном объеме? А то получается какое-то "смотреть можешь что угодно, а целовать только в щёчку". Не комильфо, вобщем