РАССЫЛКА ЯВЛЯЕТСЯ ЧАСТЬЮ ПРОЕКТА RSDN , НА САЙТЕ КОТОРОГО
ВСЕГДА МОЖНО НАЙТИ ВСЮ НЕОБХОДИМУЮ РАЗРАБОТЧИКУ ИНФОРМАЦИЮ, СТАТЬИ, ФОРУМЫ,
РЕСУРСЫ, ПОЛНЫЙ АРХИВ ПРЕДЫДУЩИХ ВЫПУСКОВ РАССЫЛКИ И МНОГОЕ ДРУГОЕ.
Здравствуйте, уважаемые подписчики!
НОВОСТИ
Семинар для разработчиков
Представительство Microsoft в СНГ и Центр Компьютерного
Обучения "Специалист" при МГТУ им. Н.Э.Баумана объявляют о проведении
очередного бесплатного технического семинара в рамках долгосрочной
маркетинговой программы <Новейшие технологии Microsoft - взгляд в
будущее DESIGNTIMESP=8847>:
"Microsoft Solutions Framework (MSF) - методология
разработки ПО, проверенная временем"
3 апреля 2002 г.
Семинар предназначен для программистов, разработчиков,
менеджеров и руководителей проектов, - и посвящен внедрению и использованию
Microsoft Solutions Framework (MSF).
MSF - это набор концепций и рекомендуемых моделей, которые
позволяют разрабатывать и внедрять распределенные информационные системы
масштаба предприятия на основе технологий и инструментальных средств фирмы
Microsoft. MSF базируется на практических результатах организации
распределенных вычислений и применения клиент-серверных технологий, полученных
как в самой фирме Microsoft, так и ее партнерами и заказчиками. Многие
концепции MSF хорошо известны, однако основное достоинство MSF - это
систематизация и структуризация информации в форме базы знаний, удобной для
ознакомления и использования.
На семинаре будут рассмотрены различные методологии разработки программного
обеспечения и показан цикл разработки программных и инфраструктурных решений -
от получения информации от заказчика до внедрения готового продукта. Также
будет обсуждаться минимальный набор формальных процессов, отсутствие которых
может превратить проект в безнадежный.
Основные темы семинара:
жизненный цикл программного продукта;
формальные процессы, как часть методологии;
CASE (Computer Aided Software Engineering) - средства.
Проведет семинар один из ведущих преподавателей Центра Александр
Кораблин (MCSD, MCT), имеющий уникальный для России статус
сертифицированного тренера Microsoft по программе Microsoft
Solution Framework.
Для участия в работе семинара необходимо заполнить
регистрационную форму. Регистрационная форма может быть отправлена по факсу
(095) 263 6237, а также Вы можете оформить заявку на сервере
http://www.specialist.ru/events/microsoft/
В рамках данной акции планируется провести еще 4 технических
семинара:
Интеграция бизнес-приложений с использованием Microsoft BizTalk(tm)
Server 2000
Microsoft Windows(r)
XP - основа технологии .NET
Microsoft Exchange 2000 - перспективы развития
Обеспечение безопасности средствами Windows 2000/XP
Семинары будут проводиться раз в месяц и призваны познакомить
широкую аудиторию IT-специалистов с последними решениями Microsoft в области
информатизации больших и средних предприятий. Семинары проведут ведущие
преподаватели Центра, многие из которых прошли специальные тренинги по
подготовке преподавателей по новым продуктам и технологиям Microsoft за
рубежом. Среди участников семинаров будут разыграны призы, главный из которых
бесплатное обучение на авторизованном курсе Microsoft, а также
бесплатные сертификационные тесты, сувениры с символикой Microsoft.
ВОПРОС - ОТВЕТ
Как подключиться к запущенным экземплярам Explorer'a?
Начиная с версии 4.71, оболочка содержит объект ShellWindows,
который предоставляет доступ к коллекции уже запущенных экземпляров Internet
Explorer'a. Назначение методов этого интерфейса вполне прозрачно. Свойство
Count возвращает число элементов в коллекции. Метод Item позволяет получить
указатель на интерфейс IWebBrowser2 соответствующего окна.
ПРИМЕЧАНИЕ
На самом деле коллекция ShellWindows содержит открытые окна не
только Internet Explorer'a, но и Windows Explorer'a. Несмотря на это, к
экземплярам обоих типов можно успешно обращаться через указатель на
IWebBrowser2. Отличить Internet Explorer можно, например, по наличию объекта
document.
Таким образом, воспользовавшись этой коллекцией можно не только
узнать, сколько и каких окон Explorer'а открыто, но и получить практически
полный контроль над ними. Действительно, имея указатель на IWebBrowser2, мы
вольны делать с объектами Explorer'a все что заблагорассудиться. Следующий
пример просто закроет их. Нет, постойте, следующий пример закроет все окна
Windows Explorer'a, а во всех окнах Internet Explorer'a изменит цвет фона на
синий.
Листинг 1. EnumExp.cpp
#include <iostream>
// для CComPtr
#include <atlbase.h>
// ShellWindows
#include "exdisp.h"
// MSHTML
#include "mshtml.h"
void main()
{
// Инициализируем COM
CoInitialize(NULL);
try
{
CComPtr<IShellWindows> spShWin;
if (FAILED(spShWin.CoCreateInstance( __uuidof( ShellWindows))))
throw std::cout << "Couldn't create object SHDocVW::ShellWindows";
// Получаем количество открытых окон
LONG nCount;
spShWin->get_Count( &nCount);
std::cout << ((nCount)?"Shell windows list:":"none ...") << std::endl;
for (int i=0; i<nCount; i++)
{
// Получаем очередное окно
CComPtr<IDispatch> pDisp;
spShWin->Item( CComVariant(i), &pDisp);
CComQIPtr<IWebBrowser2> pIE( pDisp);
if (pIE == NULL)
throw "Unable to query Internet Explorer object";
// Получаем URL закруженного документа (открытой папки)
USES_CONVERSION;
CComBSTR bsUrl;
pIE->get_LocationURL( &bsUrl);
LPTSTR lpstrUrl = W2T(bsUrl);
// Пробуем получить html-документ
CComPtr<IDispatch> pDispDoc;
pIE->get_Document( &pDispDoc);
CComQIPtr<IHTMLDocument2> pHtmlDoc( pDispDoc);
// Если документ удается получить, значит это окно Internet Explorer'а
if (pHtmlDoc)
{
std::cout << " Internet Explorer: " << lpstrUrl << std::endl;
// Ради примера, меняем цвет фона на синий
pHtmlDoc->put_bgColor( CComVariant( L"blue"));
}
// иначе это просто Explorer
else
{
std::cout << " Window Explorer: " << lpstrUrl << std::endl;
// Закроем окно
pIE->Quit();
}
}
}
catch(char* lpstrErr) {
std::cout << lpstrErr << std::endl;
}
catch(...) {
// Unknown error...
std::cout << "Unknown error..." << std::endl;
}
CoUninitialize();
return;
}
События DShellWindowsEvents
Кроме этого, объект ShellWindows поддерживает событийный
интерфейс DShellWindowsEvents, подключившись к которому можно своевременно
получать уведомления обо всех изменениях в жизни окон Explorer'а. Этот
интерфейс содержит всего два метода WindowRegistered и WindowRevoked, которые
вызываются оболочкой соответственно при создании и закрытии очередного окна
эксплорера. Вопросы подключения к событиям достаточно подробно рассмотрены в
различных источниках (в том числе и на нашем сайте), поэтому не будем
останавливаться на них отдельно. Пример реализации похожего примера с
поддержкой событий DShellWindowsEvents можно найти
здесь.
Это все на сегодня. Пока!
Алекс Jenterjenter@rsdn.ru
Duisburg, 2001. Публикуемые в рассылке
материалы принадлежат сайту RSDN.