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);

  • 相关阅读:
    mysql 往表中insert的时候如何让主键id按当前表的最大值自动增长?
    visual studio 2013 win7安装笔记
    mysql奇葩之旅
    java JVM常见的四大异常及处理方案
    DDR3_旧版(2):初始化
    DDR3_旧版(1):IP核调取
    【转】AXI_Lite 总线详解
    ZYNQ笔记(7):AXI从口自定义IP封装
    ZYNQ笔记(6):普通自定义IP封装实现PL精准定时中断
    ZYNQ笔记(5):软中断实现核间通信
  • 原文地址:https://www.cnblogs.com/ArRan/p/2808389.html
Copyright © 2011-2022 走看看