Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обработка событий IE 
:(
    Опции темы
Pori
Дата 7.5.2009, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 10.9.2007

Репутация: нет
Всего: 1



Нужна обработка событий в IE.

Вот, что получилось:

Код

        IShellWindows *iSW;
        //DShellWindowsEvents *dSWE;
        LPUNKNOWN dSWE;
        HRESULT hRes;
        ULONG lpdCookie;

        if (FAILED(CoInitialize(NULL)))
        {
                return 0;
        }

        hRes = CoCreateInstance(CLSID_ShellWindows, NULL, CLSCTX_ALL, IID_IShellWindows, (void **)&iSW);
        
        if(SUCCEEDED(hRes))
        {
                IConnectionPointContainer* cpc;
                iSW->QueryInterface(IID_IConnectionPointContainer, (void **)&cpc);
                IConnectionPoint *cp;
                if (SUCCEEDED(cpc->FindConnectionPoint(DIID_DShellWindowsEvents, &cp)))
                {

                        if (SUCCEEDED(cp->Advise(dSWE, &lpdCookie)))
                                cp->Release();
                        cpc->Release();
                }

                iSW->Release();
                iSW = NULL;
        }
        CoUninitialize();




Естественно Advise выдает ошибку, т.к. dSWE не определена. Как я понял, тут нужно передавать свой класс, который способен принимать извещения. Так вот, вопрос, что это за класс? Пробовал брать DShellWindowsEvents, но это абстрактный класс, и, соответственно, advise работать отказывается. Возможно, я запутался... Пожалуйста, проясните ;)


Немного прошерстил литературу, в итоге, нужен объект, принимающий события IE. Т.е. объект с функциональностью: IUnknown,
IDispatch, Invoke и способностью искать DISPID в таблице приемников и делегировать событие соответствующему обработчику.

НО каждой реализации также требуется определенная специфическая функциональность. Похоже можно создать этот объект унаследовав DShellWindowsEvents и еще что-то или нет?

Это сообщение отредактировал(а) Pori - 7.5.2009, 23:26
PM MAIL   Вверх
xvr
Дата 12.5.2009, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Надо реализовать интерфейс DShellWindowsEvents, т.е. унаследоваться от него.
Собственно DShellWindowsEvents определен в ExDisp.idl и выглядит так
Код

    [
        uuid(fe4106e0-399a-11d0-a48c-00a0c90a8f39), // DIID_DShellWindowsEvents
        helpstring("Event interface for IShellWindows"),
    ]
    dispinterface DShellWindowsEvents
    {
        properties:
        methods:
        [id(DISPID_WINDOWREGISTERED), helpstring("A new window was registered."), helpcontext(0x0000)]
        void WindowRegistered([in] long lCookie);

        [id(DISPID_WINDOWREVOKED), helpstring("A new window was revoked."), helpcontext(0x0000)]
        void WindowRevoked([in] long lCookie);
    }
Т.е. нужно реализовать GetIDsOfNames и Invoke для ID WindowRegistered и WindowRevoked

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0392 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.