COMインターフェイスを使用してのHTMLドキュメントの取得


Atsu  2005-04-19 09:27:18  No: 57066

たびたび質問させていただいています。

今回、別プロセスのIEからHTMLドキュメントを取得するプログラムを作成しています。IHTMLDocument2のGetbodyメソッドを使用して、bodyダグ内のドキュメントは取得できます。これを全部のHTMLドキュメントを取得するプログラムを作成しましたが、ホームページの場所によりエラーがでてしまします。エラー内容は以下の通りです。「0x0042d4d0 でハンドルされていない例外が発生しました : 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。」
strlen.asmのmain_loop:
        mov     eax,dword ptr [ecx]     ; read 4 bytes
でエラーが発生しているようです。

以下に私が作成したソースを掲載します。よろしくご教授ください。

#include "stdafx.h"
#include <iostream>
#include "ATLBASE.H"
#include "objbase.h"
using namespace std;
#import "C:\WINDOWS\system32\mshtml.tlb"   rename_namespace("CLASS2") named_guids
#import "C:\WINDOWS\system32\shdocvw.dll"  no_namespace named_guids

int _tmain(int argc, _TCHAR* argv[])
{

long nIndex;
long nMax;

HRESULT sc;
sc = ::CoInitialize(NULL);

CLASS2::IHTMLDocument2Ptr document;
CLASS2::IHTMLElementPtr   body;
CLASS2::IHTMLElementPtr pElement;
CLASS2::IHTMLElementCollectionPtr pCol;
IShellWindowsPtr pShellWindows;
pShellWindows.CreateInstance(__uuidof(ShellWindows));

_variant_t aaa("<HTML>");

IDispatchPtr spDisp;
nMax = pShellWindows->GetCount();
for (nIndex = 0; nIndex < nMax; nIndex++) {
_variant_t va(nIndex, VT_I4);
spDisp = pShellWindows->Item(va);

IWebBrowser2Ptr spBrowser(spDisp);

if (spBrowser != NULL)
{
cout << (LPCTSTR)spBrowser->GetLocationURL()<<"\n\n";

document=spBrowser->GetDocument();
//body=document->Getbody();
pCol=document->Getall();
//cout <<body->GetouterHTML()<<"\n\n";

  //all の内容をリストアップ
  USES_CONVERSION ;

    
    CComVariant  vintName(0) ;
    CComVariant  vintIndex(0) ;
    IDispatchPtr  pdsp2 ;
    pdsp2=pCol->item(vintName, vintIndex) ;
    pElement = pdsp2;
    cout <<pElement->GetouterHTML()<<"\n\n";

}
}
Sleep(5000);
  return 0;
}


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加