zoukankan      html  css  js  c++  java
  • c++ 有关webBrowser控件的一些整理

    首先,大部分操作都需要用到头文件

    #include <MsHTML.h>

    这个头文件在c#中也有对应的命名空间。应该是.net成员之一。也是……webBrowser就是一个com控件,开发为basic和c#准备的。在c++使用非常繁琐。几个困扰点:空指针:很多情况下的可能性是页面没有完全加载,通过readystate判断下需要获得IHTMLDocument3指针:之所以使用3而不使用网络上流传广泛的2.主要是因为对于控件操作比较方便。2当然也行……我觉得挺麻烦的。

    CComPtr<IDispatch> m_pDisp = (IDispatch *)m_ceHtml.get_Document();

    CComPtr<IHTMLDocument3> m_pDoc;

    m_pDisp->QueryInterface(IID_IHTMLDocument3,(void **)&m_pDoc);

    填写网页中某个ID的控件的内容。

    IHTMLElement *m_pElementMail=NULL;

    HRESULT hr = m_pDoc->getElementById(CComBSTR(_T("ctl00_PlaceHolderPage_email")),&m_pElementMail);

    if(hr!=NULL)

    {

    MessageBox(_T("GetElement of null"));

    }

    CComBSTR m_bStr = _T("value");

    CComVariant m_var =_T("hello@126.com");

    m_pElementMail->setAttribute(m_bStr,m_var);

    获得某个ID的控件的数据

    IHTMLElement *m_pCheckImg =NULL;

    hr = m_pDoc->getElementById(CComBSTR(_T("mcImgVC")),&m_pCheckImg);

    if(hr!=NULL)

    {

    MessageBox(_T("GetElement of null"));

    }

    m_bStr = _T("src");

    m_pCheckImg->getAttribute(m_bStr,0,&m_var);

    对于验证码:

    嘛,现在验证码很多都是点击切换,访问切换,所以在获取上只能说通过读取内存或者查找缓存。

    使用webBrowser控件,有一种相对简单的方法,利用Render的DrawToDC功能绘制在Picture Control中。

    IHTMLElement *m_pCheckImg =NULL;

    hr = m_pDoc->getElementById(CComBSTR(_T("mcImgVC")),&m_pCheckImg);

    if(hr!=NULL)

    {

    MessageBox(_T("GetElement of null"));

    }

    m_bStr = _T("src");

    m_pCheckImg->getAttribute(m_bStr,0,&m_var);

    m_strCheckCode = m_var;

    UpdateData(FALSE);

    IHTMLElementRender *m_pRender =NULL;

    m_pCheckImg->QueryInterface(IID_IHTMLElementRender,(void **)&m_pRender);

    RECT rc;

    m_bmp.GetWindowRect(&rc);

    ScreenToClient(&rc);

    long t=0;

    m_pCheckImg->get_offsetHeight(&t);

    rc.bottom=rc.top+t;

    m_pCheckImg->get_offsetWidth(&t);

    rc.right=rc.left+t-1;

    m_bmp.MoveWindow(&rc);

    HDC hDc = m_bmp.GetDC()->GetSafeHdc();

    m_pRender->DrawToDC(hDc);

  • 相关阅读:
    django-based blog- mezzanine
    echo "hello" | nc -4t -w1 localhost 8001
    boost静态链接的问题 -lgcc_s
    Vim 新用法
    解决docker中DNS查询的问题
    centos 升级GCC/G++
    enable c++11 in autoconf in fucking gnu auto tools
    Fucking "pkg-config not found"
    在CentOS 6.X 上面安装 Python 2.7.X
    redis sentinel 配置
  • 原文地址:https://www.cnblogs.com/ArRan/p/2808389.html
Copyright © 2011-2022 走看看