VC++ webbrowser函数使用范例

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               
/*============================说明部分=================================  实现一下函数需包含头文件 #include <Wininet.h> #include <Shlwapi.h> Linker : Wininet.lib  Shlwapi.lib =================================================================*/  /*========================================END========================================*/    /*============================说明部分================================= 清除指定网页Cookie,注意传参,如:www.baidu.com 要写为:baidu.com =================================================================*/  BOOL CleanUrlCache(LPCTSTR lpUrl)  {      LPINTERNET_CACHE_ENTRY_INFO lpICEI = NULL;      DWORD dwSize = 0;      HANDLE hFind = FindFirstUrlCacheEntry(NULL, NULL, &dwSize);      if (hFind == NULL && GetLastError() != ERROR_INSUFFICIENT_BUFFER)          return FALSE;        lpICEI = (LPINTERNET_CACHE_ENTRY_INFO)new char[dwSize];      hFind = FindFirstUrlCacheEntry(NULL, lpICEI, &dwSize);      if (hFind == NULL)      {          delete lpICEI;          return FALSE;      }        do       {          if (StrStrI(lpICEI->lpszSourceUrlName, lpUrl))          {              int bRet = DeleteUrlCacheEntry(lpICEI->lpszSourceUrlName);          }          delete lpICEI;          lpICEI = NULL;          dwSize = 0;            if (!FindNextUrlCacheEntry(hFind, NULL, &dwSize) && GetLastError() != ERROR_INSUFFICIENT_BUFFER)              break;          lpICEI = (LPINTERNET_CACHE_ENTRY_INFO)new char[dwSize];      } while (FindNextUrlCacheEntry(hFind, lpICEI, &dwSize));        if (lpICEI != NULL)          delete lpICEI;      return TRUE;  }  /*========================================END========================================*/          /*============================说明部分================================= 清除IE所有Cookie #include <Wininet.h> Linker : Wininet.lib =================================================================*/  void   ClearInternetCache()     {         DWORD   dwNeeded   =   0;         FindFirstUrlCacheEntry(NULL,   NULL,   &dwNeeded);          if   (GetLastError()   ==   ERROR_INSUFFICIENT_BUFFER)         {             unsigned   char   *buffer   =   new   unsigned   char[dwNeeded];             try             {                 LPINTERNET_CACHE_ENTRY_INFO   lpicei   =                     reinterpret_cast<LPINTERNET_CACHE_ENTRY_INFO>(buffer);                 HANDLE   HFind   =     FindFirstUrlCacheEntry(NULL,   lpicei,   &dwNeeded);                 DeleteUrlCacheEntry(lpicei->lpszSourceUrlName);                  bool   no_more_files   =   false;                 while   (!no_more_files)                 {                     if   (FindNextUrlCacheEntry(HFind,   lpicei,   &dwNeeded))                     {                         DeleteUrlCacheEntry(lpicei->lpszSourceUrlName);                     }                     else   switch   (GetLastError())                     {     case   ERROR_INSUFFICIENT_BUFFER:         {             delete   []   buffer;             buffer   =   new   unsigned   char[dwNeeded];             lpicei   =   reinterpret_cast<LPINTERNET_CACHE_ENTRY_INFO>(buffer);             break;         }     default:         {             no_more_files   =   true;             break;         }                     }                 }              FindCloseUrlCache(HFind);          }             catch   (...)             {                 delete   []   buffer;             }             delete   []   buffer;                         }     }    /*========================================END========================================*/    /*============================说明部分================================= CString 转换为 VARIANT 类型 =================================================================*/  StringToVariant(CString str)  {      VARIANT variant;      VariantInit(&variant);      variant.vt=VT_BSTR;      variant.bstrVal=str.AllocSysString();        return variant;  }  /*========================================END========================================*/    /*============================说明部分================================= 打开指定URL,其中m_webBrowser 是web browser 控件关联的控件类型的变量 =================================================================*/  OpenURL(LPCTSTR strURL)  {      VARIANT vInfo;      VariantInit(&vInfo);      CString strHeaders=_T("Content-Type:application/x-WWW-form-urlencoded");      VARIANT vHeaders=StringToVariant(strHeaders);      m_webBrowser.Navigate(strURL,&vInfo,&vInfo,&vInfo,&vHeaders);  }  /*========================================END========================================*/          /*============================说明部分================================= 向指定ID的HTML标记中输入文字 strID为标记的ID值  #include <mshtml.h> #include <atlbase.h> =================================================================*/  InputText(CString strID, CComVariant strText)  {      HRESULT hr;        IDispatch *pDisp;      pDisp=m_webBrowser.get_Document();  //得到webBrowser控件接口         IHTMLDocument2* pDoc;      hr=pDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc); //得到网页文档接口             IHTMLElementCollection* pColl=NULL;      hr=pDoc->get_all(&pColl);//得到所有网页元素记录集合         IDispatch *pDisp2;      VARIANT index;//用于接收返回元素基于的索引,一般不用,设为0就好,而是用IDispatch 接收元素对象接口       //V_VT(&index)=VT_I4;       //V_I4(&index)=0;       index.vt=VT_I4;      index.lVal=0;        VARIANT varID;//要查找的HTML标记ID       varID=StringToVariant(strID);        hr=pColl->item(varID,index,&pDisp2); //找到元素的位置       if(S_OK==hr&&NULL!=pDisp2)      {          IHTMLElement* pElem=NULL;          hr=pDisp2->QueryInterface(IID_IHTMLElement,(void**)&pElem);            if(S_OK==hr&&NULL!=pElem)          {              pElem->put_innerText(strText.bstrVal);              pElem->Release();          }          pDisp2->Release();          pDisp->Release();      }  }  /*========================================END========================================*/  /*============================说明部分================================= 点击指定ID值的HTML按钮 strID是按钮的ID值 #include <mshtml.h> #include <atlbase.h> =================================================================*/  ClickBtn(CString strID)  {      HRESULT hr;      IDispatch* pDisp;      pDisp=m_webBrowser.get_Document();//①得到网页控件接口         IHTMLDocument2* pDoc;      hr=pDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc);//②得到网页文档接口         IHTMLElementCollection* pColl=NULL;      hr=pDoc->get_all(&pColl);//③得到网页元素记录集合接口         IDispatch* pDisp2;      VARIANT index;      //V_VT(&index)=VT_I4;       //V_I4(&index)=0;       index.vt=VT_I4;      index.lVal=0;        VARIANT varID;      varID=StringToVariant(strID);        hr=pColl->item(varID,index,&pDisp2);//④得到指定HTML标记接口         if(S_OK==hr&&NULL!=pDisp2)      {          IHTMLElement* pElem=NULL;          hr=pDisp2->QueryInterface(IID_IHTMLElement,(void**)&pElem);//⑤得到确定元素接口             if(S_OK==hr&&NULL!=pElem)          {              pElem->click();              pElem->Release();          }          pDisp2->Release();          pDisp->Release();      }  }  /*========================================END========================================*/  /*=============================================================== 根据页面Class属性值点击页面元素 =================================================================*/  void CPiLiangQianDaoDlg::ClickByClassName()  {      IHTMLElementCollection   *objAllElement=NULL;       IHTMLDocument2   *objDocument=NULL;         objDocument=(IHTMLDocument2 *)m_webBrowser.get_Document();       //由控件得到IHTMLDocument2接口指针         objDocument-> get_all(&objAllElement);   //得到网页所有元素的集合         IHTMLElement   *   pElem   =   NULL;         VARIANT   name;       CComBSTR   tag;       long     a;       objAllElement-> get_length(&a);       name.vt=VT_I4;      for(int   i=0;i <a;i++)//遍历所有元素       {           name.lVal   =   i;           IDispatch   *   pDispatch=NULL;           objAllElement-> item(name,name,&pDispatch);           IHTMLElement*   spElement;           pDispatch-> QueryInterface(IID_IHTMLElement,   (void**)&spElement);           BSTR   tag;           spElement->get_className(&tag);           CString   ss(tag);           if(ss == "j_signbtn sign_btn2 j_cansign sign0" || ss == "j_signbtn sign_btn2 j_cansign sign1" || ss == "j_signbtn sign_btn2 j_cansign sign6")               spElement-> click();       }   /*=====================================================================================*/  /*===================================================================================== 根据网页打开的进程设置进度条 给web browser添加OnProgressChange响应函数 m_procCtrl是进度条关联的控件变量 =======================================================================*/  if(ProgressMax>0)      m_procCtrl.SetPos(100*Progress / ProgressMax);  //========================================     /*==================================================================== 搜索点击页面文字连接 Str为文字 =======================================================================*/  ClickItem(CString str)  {      IHTMLElementCollection   *objAllElement=NULL;       IHTMLDocument2   *objDocument=NULL;                objDocument=(IHTMLDocument2 *)m_webBrowser.get_Document();      //由控件得到IHTMLDocument2接口指针         objDocument-> get_all(&objAllElement);   //得到网页所有元素的集合         IHTMLElement   *   pElem   =   NULL;         VARIANT   name;       CComBSTR   tag;       long     a;       objAllElement-> get_length(&a);       name.vt=VT_I4;      for(int   i=0;i <a;i++)//遍历所有元素       {           name.lVal   =   i;           IDispatch   *   pDispatch=NULL;           objAllElement-> item(name,name,&pDispatch);           IHTMLElement*   spElement;           pDispatch-> QueryInterface(IID_IHTMLElement,   (void**)&spElement);           BSTR   tag;           spElement-> get_outerText(&tag);           CString   ss(tag);           if(ss=="地图")               spElement-> click();       }   }  /*=====================================================================================*/  /*======================================================================================= 在DocumentCompleteExplorer判断是否为主框架加载完毕 在页面中有多个框架时会多次触发,可能导致页面中后面的“首页”链接得不到,可以在void   CTest2Dlg::OnDownloadCompleteExplorer1(LPDISPATCH   pDisp,   VARIANT   FAR*   URL)  加入下面代码:  ======================================================================================*/CComQIPtr <IWebBrowser2,   &IID_IWebBrowser2>   pWeb; CComQIPtr <IHTMLDocument2,&IID_IHTMLDocument2>   pDoc2; pWeb   =   pDisp; pWeb-> get_Document((IDispatch**)&pDoc2); if   (m_ie.GetDocument()   !=   pDoc2)   return/*==========================================================================*/      /*======================================================================    判断网页是否加载完毕 ========================================================================*/  void CPiLiangQianDaoDlg::DocumentCompleteExplorer(LPDISPATCH pDisp, VARIANT* URL)  {      // TODO: 在此处添加消息处理程序代码       if(m_webBrowser.get_ReadyState() == READYSTATE_COMPLETE && times == 0)       {       ((CListBox *)GetDlgItem(IDC_LIST_STATE))->AddString(_T("加载完毕!"));       m_IsInitDone = 1;       times++;      }  }     /*======================================================================================  截取网页部分内容,并画图显示 ======================================================================================*/  {  CClientDC hImageDC(GetDlgItem(IDC_EDIT_INFO));        HRESULT hr;        IDispatch *pDisp;      pDisp=m_webBrowser.get_Document();  //得到webBrowser控件接口         IHTMLDocument2* pDoc;      hr=pDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc); //得到网页文档接口             IHTMLElementCollection* pColl=NULL;      hr=pDoc->get_all(&pColl);//得到所有网页元素记录集合         IDispatch *pDisp2;      VARIANT index;//用于接收返回元素基于的索引,一般不用,设为就好,而是用IDispatch 接收元素对象接口       //V_VT(&index)=VT_I4;       //V_I4(&index)=0;       index.vt=VT_I4;      index.lVal=0;        VARIANT varID;//要查找的HTML标记ID       varID=StringToVariant(_T("userlike_info_head_img"));        hr=pColl->item(varID,index,&pDisp2); //找到元素的位置       if(S_OK==hr&&NULL!=pDisp2)      {          IHTMLElement3* pElem=NULL;          hr=pDisp2->QueryInterface(IID_IHTMLElement3,(void**)&pElem);          IHTMLElementRender *pRender =  NULL;            pElem ->QueryInterface(IID_IHTMLElementRender, (void **) &pRender);            pRender->DrawToDC(hImageDC);      }  }  /*=================================================================================*/    /*================================================================================= 判断网页是否加在完全(包含框架) 原理:如果直接早DocummentComple里判断的话,包含多个框架(frame)的网页就会多次激发该函数。所以这里我们这里通过pDish判断是不是主框架的的借口(最后调用该函数),如果是的话就是最后一次激发,表示主框架家在完毕,也就是整个网页加载完毕! =====================================================================================*/  void CTieBaGuajiDlg::DocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT* URL)  {      // TODO: 在此处添加消息处理程序代码       CComQIPtr <IWebBrowser2,   &IID_IWebBrowser2>   pWeb;       CComQIPtr <IHTMLDocument2,&IID_IHTMLDocument2>   pDoc2;       pWeb   =   pDisp;       pWeb-> get_Document((IDispatch**)&pDoc2);       if   (m_webBrowser.get_Document()   ==   pDoc2)         {            ((CListBox*)GetDlgItem(IDC_LIST_STATE))->AddString(_T("初始化完成!"));      }      /////////////////////////////////////////       /*if(0==m_count)     {         ((CListBox*)GetDlgItem(IDC_LIST_STATE))->AddString(_T("初始化完成!"));         m_count++;     }*/  }  /*=============================================================================*/  /*==============================================================================  另外如果不想让webbrowser空间弹出错误提示可以,在对空间资源编辑时设置Slient为TRUE ==============================================================================*/  


           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
VC++ Webbrowser2控件的缩放功能 最近一直忙着做毕业设计,博客好久没有更新啦。。 今晚心情愉悦,就把之前用Webbrowser控件的几个简单功能写一下吧。 关于Webbrowser控件我自己了解就是嵌入在各种客户端软件中的浏览器控件啦,各种编程语言都有带的控件,比较常用,不过微软包装的很好,很难去深入。 下面我介绍一下:如何浏览网页和缩放网页啦。 第一步、当然是在资源视图对话框界面中,在工具箱中右击选择选择项,然后到COM组 阅读详情

相关推荐

MFC中通过webbrowser控件操作网页。

这是一个通过webbrowser打开百度并控制搜索内容的MFC小项目。其它网页控制大同小异,可以做为参考。VS2015项目。

CHtmlView截图

使用PrintWindow函数为CHtmlView窗口截图时候发现,如果窗口没有Show或者窗口的位置超出了屏幕范围,超出的部分将会是黑色的。 另一种截图方法是使用IHtmlElementRenderDrawToDC方法将document的body绘制到dc。 直接给出代码: CComPtr window2=GetIHTMLWindow2(); CCom

dyf7970268的专栏 984

VC6.0和VC2012中调用WebBrowser简单的实现过程(图解过程).docx

VC6.0和VC2012中调用WebBrowser简单的实现过程(图解过程) 一个简单的例子

2021-04-08 C语言 遍历一个文件夹的所有文件以及函数strstri不区分大小写查找字符串

C语言 遍历一个文件夹的所有文件以及函数strstri不区分大小写查找字符串 一、遍历一个文件夹的所有文件代码 int listallfilename(const char* path) { DIR *dir; struct dirent *ptr; dir = opendir(path); while((ptr = readdir(dir)) != NULL) { printf("path=%s,d_name: %s\n",.

海月汐辰 1044

StrStrI 与 strstr

PTSTR StrStrI( _In_  PTSTR pszFirst, _In_  PCTSTR pszSrch );

jiangqin115的专栏 6666

C语言stristr、strstri的实现

自己写了个stristr/strstri功能的函数

悠闲人生 1万+

StrStrI函数

StrStrI function Finds the first occurrence of a substring within a string. The comparison is not case-sensitive. 查找子字符串的第一个出现在字符串。比较时可以忽略大小写。 // Syntax C++PTSTR StrStrI( _In_ PTSTR pszFirst, _In_

胸怀世界 1711

『转』VC++ webbrowser函数使用范例

/*============================说明部分================================= 实现一下函数需包含头文件 #include <Wininet.h> #include <Shlwapi.h> Linker : Wininet.lib Shlwapi.lib =============...

weixin_30477293的博客 138

MFC的WebBrowser控件 C++与JavaScript之间数据交互传递

-------------------------------------------------------------------------------------------------------------------------------------------     最近开发MFC程序,需要使用WebBrowser控件来调用百度地图API,但是在绘制轨迹时出现了偏移,

allin_allin的恋爱小屋 9012

VC++ 使用WebBrowser控件中html文件以资源形式加载

1 . . . . 2 3 //加载资源文件中的HTML,IDR_HTML1就是HTML文件在资源文件中的ID 4 wchar_t self_path[MAX_PATH] = { 0 }; 5 GetModuleFileName(NULL, self_path, MAX_PATH); 6 CString res_url; 7 r...

weixin_34162401的博客 571

如何对webbrowser和IE编程

如何对webbrowser和IE编程     一、 因为工作缘故,需要研究对IE编程,所以翻译了MS的有关资料,供参考。   IE的体系   WebBrowser Host 首先,必须有COM的基础知识,因为IE本身就是COM技术的典型应用。我们看到最上层是WebBrowser的宿主(Host),也就是任何你想重用(ReUse)webbrowser control的应用

wanglang3081的专栏 1万+

如何对webbrowser和IE编程(二)

function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(keyit=window.open(http://www.365key.com/storeit.

B!ng 1784

VB.net 里的WebBrowser 怎么使用-WebBrowser指南

http://www.jituannet.com/archives/category/%E4%BA%92%E8%81%94%E7%BD%91/page/2 首先,必须有COM的基础知识,因为IE本身就是COM技术的典型应用。我们看到最上层是WebBrowser的宿主(Host),也就是任何你想重用 (ReUse)webbrowser control的应用程序,可以是vb程序,也可以是

spt_petrolor的专栏 1万+

WebBrowser2封装的容器

最近一直都在研究关于有界面的组件如何做为主框架的子view显示出来, 终于有一些心得,在此把它贴出来供高人指点.并分享成果,难免有错误之处,因为我的水平只有这么多.任何组件都会存在唯一的CLSID,此组件也一样存在这个ID,在工程目录下面找到和类名相同的HTM文件,运行它就是发现就是组件的界面,功能也是组件里写的功能.HTML文件里是可以写脚本的,所以也可以把组件的事件同时抛出来,就可以使用W

sunmz_wjxy的专栏 2670
上一篇: 细说 ASP NET Cache 及其高级用法
下一篇: error WINDOWS H already included错误解释
老白干之再干
博客等级 码龄8年 85粉丝 247原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值