본문 바로가기
IT-개발,DB

[개발/MFC] 마우스가 위치한 곳의 IHTMLDocument2의 주소와 태그를 얻기

by SB리치퍼슨 2012. 7. 22.



마우스가 위치한 곳의 IHTMLDocument2의 주소와 태그를 얻기

[출처] http://blog.naver.com/PostView.nhn?blogId=kkt3212&logNo=100052743914&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView


마우스가 위치한 곳의 IHTMLDocument2의 주소와 태그를 얻기

#include <Oleacc.h>

#include <atlbase.h>

#include <comdef.h>

#include <mshtmlc.h>

#include <shellapi.h>

#import <shdocvw.dll> 



#pragma comment(lib,_T("Oleacc.lib"))

#define _rel(pInterface) if(pInterface)  { pInterface->Release(); pInterface=NULL;}


void CUrlFromPointDlg::OnButton1() 

{

    Sleep(3000);

    CoInitialize(NULL);


POINT ptScreen;

::GetCursorPos(&ptScreen);

IAccessible * pAccess=0;

VARIANT var;

HRESULT hr = AccessibleObjectFromPoint(ptScreen, &pAccess, &var) ;

if( FAILED(hr)) 

{

AfxMessageBox("AccessibleObjectFromPoint FAIL");

return ;

}


IServiceProvider *pSP=0;

hr = pAccess->QueryInterface(IID_IServiceProvider, (void **)&pSP);

if(hr==S_OK && pSP)

{

IHTMLElement * pElement = 0;

hr = pSP->QueryService(IID_IHTMLElement, IID_IHTMLElement, (void **)&pElement);

if (SUCCEEDED(hr))

{

            

            CString sFrameUrl = "프레임 주소 :";


            CComPtr<IDispatch> pDisp;

            pElement->get_document(&pDisp);

            if(pDisp)

            {

                CComQIPtr<IHTMLDocument2> pDoc2 = pDisp;

                if(pDoc2)

                {

                    CComBSTR bsUrl;

                    pDoc2->get_URL(&bsUrl);

                    CString sUrl(bsUrl);

                    sFrameUrl += sUrl;

                }

            }



            CComQIPtr<IHTMLElement> pElemPare ;

            pElement->get_parentElement(&pElemPare);

            CComBSTR bstr;

            if(pElemPare)

            {                

                pElemPare->get_outerHTML(&bstr);

            }else

            {

                pElement->get_outerHTML(&bstr);

            }

            CString sTag(bstr);

            CString sLink = "태그 :";

            sLink += sTag;


            AfxMessageBox(sFrameUrl + "\n\n" + sLink);


            


        }

        _rel(pElement)

    }

    

_rel(pSP);

_rel(pAccess);

VariantClear (&var);      

}


반응형

댓글