C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■88878 / 親階層)  C++ Navigate2 画面更新後のHTMLDocume
□投稿者/ びぎなー青ドンちゃん (8回)-(2018/10/09(Tue) 12:30:25)

分類:[C/C++] 

2018/10/09(Tue) 17:35:41 編集(投稿者)
2018/10/09(Tue) 17:35:30 編集(投稿者)


環境:Windows 10
   Visula Studio 2005
   C++
Win32


お世話になっております。

前回C#のWebBrrowserを使用して画面監視し
submitをする件ではご回答いただきありがとうございました。


今回はVC++で同じことができないか挑戦中です。
表示中画面の最新HTMLの情報を取得したいのですがうまくいきません。

※参考サイト「http://www.nitoyon.com/vc/tips/ie_component.htm


<やりたいこと>
画面上に作ったボタン「hwndChkButton」を押下し
表示中の画面を数秒おきに更新して
新しいリンク先「a href〜〜」があるかどうかを確認したい。

<うなくいかない点>
同じURLに対して「pWB2->Navigate2」をしても更新されず
前回の情報のまま



以下コードの一部です。
//--------------------------------------------------------------------------

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
static CComQIPtr<IWebBrowser2> pWB2 ;
static HWND hwndIE;
static HWND hwnChkButton ;



//------------------------------------------
HRESULT hr = ::CoInitialize(NULL); //COMを使うときのお約束
if (FAILED(hr)) {
return -1;
}

//------------------------------------------
switch (iMsg)
{
case WM_CREATE :
{
AtlAxWinInit();


hwndIE = CreateWindow("AtlAxWin80", "Shell.Explorer.2", WS_CHILD|WS_VISIBLE, 10, 10, 500, 300,
hwnd, (HMENU)0, GetModuleHandle(NULL), NULL);

hwndChkButton = CreateWindow("button", "BUY", WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON, 0, 0, 0, 0,
hwnd, (HMENU)3, GetModuleHandle(NULL), NULL);


// ActiveXコントロールのインターフェースを要求
CComPtr<IUnknown> punkIE;
if (AtlAxGetControl(hwndIE, &punkIE) == S_OK)
{
// IUnknownポインタからIWebBrowser2ポインタへキャスト
pWB2 = punkIE;

if(pWB2)
{
// シンクオブジェクトの作成
CComObject<CIESink>* sink;
CComObject<CIESink>::CreateInstance(&sink);

// イベントをDispatchするよう、IEコントロールにお願い
HRESULT hr = sink->AdviseToIE(punkIE);
if(SUCCEEDED(hr))
{
// ホームページへ移動
pWB2->GoHome();
return 0;
}
}

MessageBox(hwnd, "初期化に失敗", "", MB_OK) ;
EndDialog(hwnd, 0);
}

return 0 ;
}

case WM_SIZE :

MoveWindow(hwndChkButton, LOWORD(lParam) - 120, 0, 60, 30, TRUE) ;
return 0 ;



case WM_COMMAND:

if((HWND)lParam == hwndChkButton)
{

VARIANT_BOOL pOK = VARIANT_FALSE;

do{

strText2="http://〇〇〇/△△△/□□□"
CComVariant vempty, vUrlTTEST(strText2);
pWB2->Navigate2(&vUrlTTEST, &vempty, &vempty, &vempty, &vempty );

CComPtr<IDispatch> pdisp;
CComQIPtr<IHTMLDocument2> pDocW;

while(1)
{
HRESULT hr = pWB2->get_Document(&pdisp);
if(SUCCEEDED(hr) && pdisp != NULL)
{
pDocW = pdisp;
if(pDocW != NULL)
{
break;
}
}
Sleep(100);
}


SHDocVw::IWebBrowser2Ptr pIE;

pIE = FindIE(hwnd); //WebBrowserを取得する

//HTMLドキュメント取得
MSHTML::IHTMLDocument3Ptr pDoc = pIE->GetDocument();

MSHTML::IHTMLDocument3Ptr pDoc1 = pDoc;


BSTR bstrId = SysAllocString(_TEXT(L"div"));
MSHTML::IHTMLElementCollectionPtr elementp;
//elementp=doc3p->getElementsByTagName(bstrId);
elementp = pDoc1->getElementsByTagName(bstrId);


//-----------------------------------------------------------
//
//※「a hrefの"http://ddd/eee/fff" を取得」
//
//getAref="http://ddd/eee/fff";
//
//
//-----------------------------------------------------------


//保持していた「tmpAref="http://aaa/bbb/ccc"」と上記で取得したgetArefを比較
if( strcmp( _bstr_t(tmpAref), _bstr_t(getAref) )== 0 ){

pOK == VARIANT_FALSE;

//*************************************************************
//*************************************************************
//画面を更新し最新のHTMLを取得したい・・・・・が更新前の情報のまま
pWB2->Navigate2(&vUrlTTEST, &vempty, &vempty, &vempty, &vempty );
//*************************************************************
//*************************************************************

}
else{

                    
                    //submit処理へ

                    //ループを抜ける
pOK == VARIANT_TRUE;


}


Sleep(1000);


}while(pOK == VARIANT_FALSE);

}



SHDocVw::IWebBrowser2Ptr FindIE(HWND hwnd)
{
MSHTML::IHTMLDocumentPtr pDoc = FindHtmlDocument(hwnd);
if (pDoc != NULL) {
return FindWebBrowser(pDoc);
}
return NULL;
}





他の方のサイトを調べて勉強中ですが行き詰りました。
どのようにすれば画面を更新させることができますでしょうか。

何卒ご協力、ご教示頂きたく宜しくお願い致します。

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
親記事 →Re[1]: C++ Navigate2 画面更新後のHTMLDocume /WebSurfer
 
上記関連ツリー

C++ Navigate2 画面更新後のHTMLDocume / びぎなー青ドンちゃん (18/10/09(Tue) 12:30) #88878 ←Now
Re[1]: C++ Navigate2 画面更新後のHTMLDocume / WebSurfer (18/10/10(Wed) 09:31) #88882
  └ Re[2]: C++ Navigate2 画面更新後のHTMLDocume / 邪魔 (18/10/10(Wed) 09:48) #88883
    └ Re[3]: C++ Navigate2 画面更新後のHTMLDocume / びぎなー青ドンちゃん (18/10/10(Wed) 10:13) #88884
      └ Re[4]: C++ Navigate2 画面更新後のHTMLDocume / WebSurfer (18/10/10(Wed) 11:04) #88886
        └ Re[5]: C++ Navigate2 画面更新後のHTMLDocume / びぎなー青ドンちゃん (18/10/10(Wed) 11:27) #88887

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信