ПРОГРАММИРОВАНИЕ    НА    V I S U A L   C + +
РАССЫЛКА САЙТА       
RSDN.RU  

    Выпуск No. 69 от 24 марта 2002 г.

РАССЫЛКА ЯВЛЯЕТСЯ ЧАСТЬЮ ПРОЕКТА RSDN , НА САЙТЕ КОТОРОГО ВСЕГДА МОЖНО НАЙТИ ВСЮ НЕОБХОДИМУЮ РАЗРАБОТЧИКУ ИНФОРМАЦИЮ, СТАТЬИ, ФОРУМЫ, РЕСУРСЫ, ПОЛНЫЙ АРХИВ ПРЕДЫДУЩИХ ВЫПУСКОВ РАССЫЛКИ И МНОГОЕ ДРУГОЕ.

Здравствуйте, уважаемые подписчики!


 НОВОСТИ

Семинар для разработчиков

Представительство Microsoft в СНГ и  Центр Компьютерного Обучения "Специалист" при МГТУ им. Н.Э.Баумана объявляют о проведении очередного бесплатного технического семинара в рамках долгосрочной маркетинговой программы <Новейшие технологии Microsoft - взгляд в будущее >:

"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?

Демонстрационное приложение - 6 KB

Объект SHDocVw::ShellWindows

Начиная с версии 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 можно найти здесь.


Это все на сегодня. Пока!

Алекс Jenter   jenter@rsdn.ru
Duisburg, 2001.    Публикуемые в рассылке материалы принадлежат сайту RSDN.

| Предыдущие выпуски     | Статистика рассылки