たびたび質問させていただいています。
今回、別プロセスの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;
}
ツイート | ![]() |