Аннотация:
После публикации первой части статьи (см. «Программист» №1/2002) мне пришло много писем примерно следующего содержания: «Плагины – это здорово, пункт в меню – это хорошо, но нам нужен интерактив!» Поскольку «интерактив» подразумевает наличие окна на экране, то вопрос сводился к созданию так называемых Explorer Bars (или Панелей Обозревателя в русской версии IE). Полюбоваться на такую панель вы можете, выбрав какой-нибудь пункт в меню Вид > Панели обозревателя или нажав, например, Ctrl+E или Ctrl+H.
Чтобы не отвечать каждому по отдельности и в то же время как можно подробнее ответить на вопрос, я решил посвятить созданию панелей обозревателя отдельную статью.
Создал ToolBar для IE, все работает но попап меню по нажатию кнопки на ToolBar не показывается если открыть новое окно (Open Link in New Window). В чем проблема не могу понять :(
мне очень понравился ваша статья.
Вопрос:
можно ли проделать тоже самое в среде
.NET с использованием например C#.
если да то каким образом?(в обших чертах)
заранее благодарю.
В начале статьи говорилось про интеректив, Я немножко изменил данный код. Всё что он делает это эмулирует нажатие на линки, кнопки и т.д. и т.п. Допустим эмулирую нажатие на линк, эмулировать эмулирует, но страница не грузится:( Ньюанс...Она грузится если выдать месаджбокс... Почему она не обновляется??????? Плиз хелп!!!
Сперва хочу поблагодарить Вас за ваши статьи. Огромное Вам за них спасибо. Интересует еще такая вещь, как создавать "Панели инструментов"? Т.е. какие интерфейсы должны быть реализованы, как регистрировать и вообще какие отличия? Буду Вам очень признателен если Вы найдете возможность ответить мне на мой вопрос.
Я не большой знаток C#, поэтому точно ответить на вопрос я не могу. Имортировать в C# COM-объекты можно. А вот можно ли сделать из .NET-сборки COM-объект я не знаю. Если да, то повторить эксперементы, описанные в этой статье, на C# будет можно.
Реализация — точь в точь как для панелей обозревателя (т.е. реализуем IDeskBand, IObjectWithSite и по желанию IPersistStream). Отличия в регистрации.
Сначала, естественно, регистрим плагин как COM-сервер. А затем добавляем ключ
HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Toolbar \<Ваш GUID>=НазваниеПанели
И всё. Надеюсь, что понятно объяснил.
COM объекти можно создавать под .NET но они не прописиваются
в реестре и не имеют никакой GUID они просто находятся в специальном папке "BIN" и отсюда вывод IE их не увидит.
кроме того в .NET я не обнаружил аналогичные интерфейси для
работы с IE (ввыде plugin-а).
Вопрос:
Можно ли каким то другим образом организовать активизацию
кода при запуске IE?
Помогите мне пожалуйста разобраться.
Создаю я панель инструментов. Все ок. Но вот в чем проблема. Существует такая возможность в ИЕ кинуть картинку на фон панелей инструментов. Так вот на созданной мною панели этот фон не отображается. Подскажите пожалуйста как это исправить?
Спасибо, теперь появляется панель инструментов.
Если можно, то ответьте пожалуйста еще на один вопрос.
Как я понял, вначале создается окно (CreateOurWindow). Тут я чтолкнулся с тем, что это окно (панель) слишком высокая. Причем при изменении высоты к примеру на значение 25 (m_hOurWindow=CreateWindow(_myWndClass, NULL, WS_CHILD, 0, 0, 0, 25, hParent, NULL, g_hThisModule, this)) ничего не происходит, а если его выставить к примеру 400 то панель увеличится. Подскажите пожалуйста в чем здесь дело?
Для того, чтобы установить фон панельки нужно использовать RB_SETBANDINFO (iImage или hbrBack).
Для того, чтобы получить картинку, можно использовать или RB_GETBARONFO (попросив заполнить himl; это для iImage) или RB_GETBANDINFO (попросив заполнить hbrBack).
Короче, надо спросить картинку у ReBar или у другой Band и установить её для своей Band.
я пробовал так, но ничего не вышло
//в IMyIEExtention::CreateOurWindow(HWND hParent)
//присвоил m_hOurWindowParent=hParent
UINT nCount = SendMessage(m_hOurWindowParent, RB_GETBANDCOUNT, 0, 0); //
//у меня nCount=6
А Вы не могли бы подсказать мне как именно можно попросить у какого нибудь Band в ИЕ? Сам я этого незнаю, а поиск по RSDN почемуто не работает уже второй день.
Заранее благодарен.
Re: Написание Plugin'ов для Internet Explorer - II
От:
Аноним
Дата:
17.03.04 03:08
Оценка:
Здравствуйте Борис !
С большим удовольствием прочел Ваши статьи: Написание
Plugin'ов для Internet Explorer, часть первая и часть
вторая. Возник один едиственный вопрос: Какую имплементацию
на уровне кода необходимо написать в функции
IOleCommandTarget::Exec, что бы при нажатии на
кнопку(имеется ввиду toolbar Internet Explorer(a) из первой
статьи ) поднималась боковая вертикальная панель(IDeskBand)
Internet Explorer(а)(имеется ввиду статья номер два ).
Вопрос совсем не праздный, очень интересно программное
решение. Буду признателен за любую помощь. Ростислав.
Здравствуйте, zaza7, Вы писали:
Z>COM объекти можно создавать под .NET но они не прописиваются Z>в реестре и не имеют никакой GUID они просто находятся в специальном папке "BIN" и отсюда вывод IE их не увидит.
Все сильно. Сборку нужно оформить нужным образом.
1. Прописываем все ГУИДЫ в виде атрибутов на сбсорку, классы, интерфейсы
2. Подписываем сборку
3. Регистрируем с помощью regasm /tlb /codebase
Z>кроме того в .NET я не обнаружил аналогичные интерфейси для Z>работы с IE (ввыде plugin-а).
Нужно попробовать импортнуть TLB, в котором описаны все неоходимые интерфейсы. Если шарп их подымет — круто.
У меня вопрос только на счет IObjectWithSite.
Z>Можно ли каким то другим образом организовать активизацию Z>кода при запуске IE?
BHO
Re: Написание Plugin'ов для Internet Explorer - II