Поиск:

Ответ в темуСоздание новой темы Создание опроса
> IWebBrowser2, и получение информации об элементе.. 
:(
    Опции темы
Alligator325
Дата 20.2.2009, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте!!!
описание ситуации: у меня программа подключается к запущенному IE и получает коллекцию всех элементов и их значений. Задача такая при наведении мыши на какойнибуть элемент на странице IE вывести всю его информацию во всплывающем окне. К примеру наводим на элемент КНОПКА и получаем информацию (id=55 value="Сохранить" и тд.)
вот мой код:
Код

    case WM_TIMER:
        {
            KillTimer(hDlgLV,1);
            //код
            wchar_t *m_Str;

            LVITEM     lvI; 
            lvI.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE;  // | LVIF_PARAM | LVIF_STATE
            lvI.state = 1; 
            lvI.stateMask = 0; 
            HWND hLV1 = ::GetDlgItem(hDlgLV, IDC_LISTVIEW);

            ListView_DeleteAllItems(hLV1);
            IHTMLElementCollection *pElement = NULL;
            CoInitialize(NULL);
            CComPtr<IShellWindows> spShWin;
            if (FAILED(spShWin.CoCreateInstance( __uuidof( ShellWindows))))    break;
            // Получаем количество открытых окон
            LONG nCount;
            nCount=0;
            spShWin->get_Count( &nCount);
            if (nCount==0) {}
            else
            {
                for (int i=0; i<nCount; i++)
                {
                    // Получаем очередное окно
                    CComPtr<IDispatch> pDisp;
                    spShWin->Item( CComVariant(i), &pDisp);
                    CComQIPtr<IWebBrowser2> pIE( pDisp);
                    if (pIE == NULL)
                        break;
                    // Получаем URL закруженного документа (открытой папки)
                    USES_CONVERSION;
                    CComBSTR bsUrl;
                    //                    VARIANT ;//varName, , var;
                    pIE->get_LocationURL(&bsUrl);     
                    LPTSTR lpstrUrl = W2T(bsUrl);
                    // Пробуем получить html-документ
                    CComPtr<IDispatch> pDispDoc;
                    pIE->get_Document( &pDispDoc);
                    
                    CComQIPtr<IHTMLDocument2> pHtmlDoc( pDispDoc);    
                    VARIANT pVAR;
//                    Sleep(10000);
//                    for (;;)
//                    {
//                        pHtmlDoc->get_onmouseover(&pVAR);
//                        
//                        Sleep(5000);
//                    }
                    
                    char goppog[255]={0};
                    sprintf_s(goppog, "%S", lpstrUrl);
                    // Если документ удается получить, значит это окно Internet Explorer'а
                    if ((pHtmlDoc) && (strcmp(goppog,g_Peremen1.szPuth) == 0))
                    {
                        pHtmlDoc->get_all(&pElement);
                        VARIANT varName, varIndex;
                        BSTR bstr;
                        long NumItems = 0;
                        pElement->get_length(&NumItems);
                        if (!NumItems)    break;

                        HWND hWndProgress = GetDlgItem(hDlgLV, IDC_PROGRESS1);
                        SendMessage(hWndProgress, PBM_SETRANGE, 0,MAKELPARAM(0, NumItems)); 
                        for (int item_number_index = 0; item_number_index < NumItems; item_number_index++)
                        {
                            SendMessage(hWndProgress, PBM_SETPOS, item_number_index, 0); 

                            varName.vt = VT_I4;
                            varName.lVal = item_number_index;
                            varIndex.vt = VT_I4;
                            varIndex.lVal = 1;
                            IDispatch *pdisp2 = NULL;

                            if (pElement->item (varName, varIndex, &pdisp2) != S_OK) break;
                            if (pdisp2 == NULL)    break;

                            IHTMLElement *pItem = NULL;
                            IHTMLInputElement *pItem1 = NULL;
                            pdisp2->QueryInterface (IID_IHTMLElement, (LPVOID *) &pItem); 
                            pdisp2->QueryInterface (IID_IHTMLInputElement, (LPVOID *) &pItem1);
                            if (pItem == NULL)    break;

                            char  TempVariable[255]={0};    
                            char lop1[50]={0};
                            pItem->get_tagName(&bstr);
                            m_Str = bstr;
                            lvI.iItem = item_number_index;  
                            lvI.pszText =  m_Str;
                            lvI.iSubItem = C_TAGNAME;
                            ListView_InsertItem(hLV1, &lvI);
                            if (wcscmp(m_Str,L"INPUT") == 0)
                            {
                                pItem1->get_type(&bstr);
                                m_Str = bstr;
                                ListView_SetItemText(hLV1, item_number_index, C_TYPE, m_Str);
                                if (wcscmp(m_Str,L"button") == 0) 
                                {
                                    pItem1->get_value(&bstr);
                                    m_Str = bstr;
                                    ListView_SetItemText(hLV1, item_number_index, C_VALUE, m_Str);
                                    if ((wcscmp(m_Str, g_Peremen1.szButton) == 0) && (g_Peremen1.CheckStButton == TRUE))
                                    {
                                        pItem->click();
                                    }
                                }
                                if (wcscmp(m_Str,L"text") == 0) 
                                {
                                    pItem1->get_name(&bstr);
                                    m_Str = bstr;
                                    ListView_SetItemText(hLV1, item_number_index, C_NAME, m_Str);
                                    if ((wcscmp(m_Str,g_Peremen1.szEdit) == 0) || (g_Peremen1.CheckStEdit == FALSE)) 
                                    {
                                        pItem1->get_value(&bstr);
                                        m_Str = bstr;
                                        ListView_SetItemText(hLV1, item_number_index, C_VALUE, m_Str);
                                    }
                                }
                            }
                        }
                        pIE->Refresh();
                    } 
                }
            }
            if(g_Timer && (g_Peremen1.CheckStUpdate == TRUE)) SetTimer(hDlgLV,1,1000*g_Peremen1.Time,NULL);
            break;
        }

PM MAIL   Вверх
Alligator821
Дата 6.3.2009, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Что неужели ни у кого никаких мыслей нету чтоли, или просто вопрос некорректно сформулирован?
PM MAIL   Вверх
chaos
Дата 6.3.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

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



Alligator325, надо смотреть какие события можно получать от IE

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


 




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


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

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