列举IE全部Element的代码

原创 2004年05月27日 10:26:00

//--列举IE全部Element的代码

#include "stdafx.h"

#pragma warning(disable : 4049)
#pragma warning(disable : 4192)
#pragma warning(disable : 4146)

//#import "shdocvw.dll" exclude("tagREADYSTATE")
#import "shdocvw.dll"
//#import "shdocvw.dll" rename_namespace("SHELL_WINDOW")
//using namespace SHELL_WINDOW;
#define SHELL_WINDOW SHDocVw

#include <atlbase.h>
#include <comdef.h>
#include <MSHTML.H>

#include <iostream>
using namespace std;

int IElement(IHTMLDocument2Ptr sp_Doc)
{
 int ret = 0;
 CComPtr<IHTMLElementCollection> pCollection;

 do {

  cout << "---list all IE Element---" << endl;
  //--FAILED
  //if (!SUCCEEDED(sp_Doc->get_links(&pCollection)))
  if (!SUCCEEDED(sp_Doc->get_all(&pCollection)))

  {
   cout << "FAILED." << endl;
   break;
  }

  int count = 0;
  int Count = 0;
  if (!SUCCEEDED(pCollection->get_length((long*)&Count)))
  {
   cout << "FAILED." << endl;
   break;
  }

  for (int i = 0; i < Count; i++)
  {
   _variant_t index = long(i);

   CComPtr<IDispatch> spDispatch;
   if (SUCCEEDED(pCollection->item(index, index, &spDispatch)))
   {
    CComPtr<IHTMLElement> pElement;
    if (SUCCEEDED(spDispatch->QueryInterface(
     __uuidof(IHTMLElement), (void **)&pElement)))
    {
     count ++;
     CComBSTR bstr;

     pElement->get_tagName(&bstr);
     if (bstr.Length() > 0) cout << "tag=" << (char*)_bstr_t(bstr);// << endl;

     pElement->get_innerText(&bstr);
     if (bstr.Length() > 0) cout << "/ttext=" << (char*)_bstr_t(bstr) << endl;
     else cout << "/ttext=" << endl;

     pElement->toString(&bstr);
     if (bstr.Length() > 0) cout << "str=" << (char*)_bstr_t(bstr) << endl;

     //pElement->Release();
    }
    //spDispatch->Release();
   }
  }
  //pCollection->Release();
  cout << "---list count=" << count << "|" << Count << "---" << endl;

  ret = count;
  break;

 } while (false);

 return ret;
}

int main(int argc, char* argv[])
{
 cout << "---test---" << endl;
 
 //--COM
 CoInitialize(NULL);
 
 do {
  cout << "---list all IE Window---" << endl;

  SHELL_WINDOW::IShellWindowsPtr msp_SHWinds = NULL;
  HRESULT hr = msp_SHWinds.CreateInstance(__uuidof(SHELL_WINDOW::ShellWindows));
  if (S_OK != hr || NULL == msp_SHWinds)
  {
   cout << "FAILED." << endl;
   break;
  }
  
  int count = 0;
  int Count = msp_SHWinds->GetCount();
  for (int i = 0; i < Count; i++)
  {
   _variant_t va(long(i), VT_I4);
   IDispatchPtr sp_Disp;
   sp_Disp = msp_SHWinds->Item(va);
   
   //SHELL_WINDOW::IWebBrowser2Ptr sp_Browser = sp_Disp;//--OK
   SHELL_WINDOW::IWebBrowser2Ptr sp_Browser(sp_Disp);
   if (NULL != sp_Browser)
   {
    //cout << (char*)sp_Browser->GetLocationName() << endl;

    IHTMLDocument2Ptr sp_Doc(sp_Browser->GetDocument());
    if (NULL != sp_Doc)
    {
     count ++;

     CComBSTR bstr;
     sp_Doc->get_title(&bstr);
     cout << (char*)_bstr_t(bstr) << endl;

     static int e = 0;
     if (0 == e) e = IElement(sp_Doc);
     
     sp_Doc.Release();
    }

    sp_Browser.Release();
   }
  }
  
  msp_SHWinds.Release();

  cout << "---list count=" << count << "---" << endl;
  break;
 } while (false);
 
 //--COM
 //CoUninitialize();//--???
 OleUninitialize();
 
 return 0;
}

Element属性方法的浏览器兼容性概览

参考自https://developer.mozilla.org/en-US/docs/Web/API/Element
  • sunqunsunqun
  • sunqunsunqun
  • 2013年12月17日 09:39
  • 2533

vue2.0+elementui 兼容ie以及使用部分内容没有渲染成功

vue2.0+elementui 兼容ie以及使用部分内容没有渲染成功
  • qq_32375417
  • qq_32375417
  • 2017年11月16日 14:13
  • 1093

素数的快速列举

好久没来这里了。最近看了一些数论方面的文章,受益匪浅。想到我们初学VB时,利用循环查找素数是必修之课,随手写了两段列举素数的代码,并详细注释。自己感觉还是比较快的。 代码如下: ***********...
  • northwolves
  • northwolves
  • 2005年04月18日 01:12
  • 2590

列举IE与其他浏览器不一样的特性?

1)IE支持currentStyle,Firefox使用getComputStyle; 2)IE使用innerText,FireFox使用textContent; 3)滤镜方面:IE:filt...
  • michael8512
  • michael8512
  • 2017年09月16日 20:52
  • 500

IE中实现HTMLElement

在DOM标准中,每个HTML元素都是继承自HTMLElement。比如有如下代码:  window.onload = function(){      alert(document.body in...
  • xiaopeng__
  • xiaopeng__
  • 2011年11月08日 22:18
  • 1896

Linux 列出所有正在运行的进程

ps命令 输入下面的ps命令,显示所有运行中的进程: # ps aux | less 其中, -A:显示所有进程 a:显示终端中包括其它用户的所有进程 x:显示无控制终端的进程 ...
  • mengyafei43
  • mengyafei43
  • 2014年05月22日 17:47
  • 5631

实现浏览器兼容版的element.children

element.children能够获取元素的元素子节点,但是低版本的ie不支持,兼容实现://声明一个函数,可以完成element.children相似的功能 function ge...
  • shuiseyangguang
  • shuiseyangguang
  • 2017年08月29日 21:20
  • 151

素数的快速列举(二)

       半年前曾在我的BLOG发过一篇文章(http://blog.csdn.net/northwolves/archive/2005/04/18/351998.aspx),对素数的快速列举进行...
  • northwolves
  • northwolves
  • 2005年11月18日 23:56
  • 1904

实现浏览器兼容版的element.dataset

element.dataset获取自定义属性时(element.dataset.id),在一些低版本的IE浏览器下不兼容,兼容解决性代码。 dataset ...
  • qq_21794603
  • qq_21794603
  • 2017年05月25日 18:27
  • 641

placeholder在IE8中兼容性问题解决

if( !('placeholder' in document.createElement('input')) ){ $('input[placeholder],textarea[pl...
  • qq_35746765
  • qq_35746765
  • 2017年07月25日 16:51
  • 154
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:列举IE全部Element的代码
举报原因:
原因补充:

(最多只允许输入30个字)