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

わんくま同盟

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

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

ツリー一括表示

C++ Navigate2 画面更新後のHTMLDocume /びぎなー青ドンちゃん (18/10/09(Tue) 12:30) #88878
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


親記事 / ▼[ 88882 ]
■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;
}





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

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

[ □ Tree ] 返信 編集キー/

▲[ 88878 ] / ▼[ 88883 ]
■88882 / 1階層)  Re[1]: C++ Navigate2 画面更新後のHTMLDocume
□投稿者/ WebSurfer (1619回)-(2018/10/10(Wed) 09:31:40)
マルチポストのようですので、他のポスト先の URL を貼っておきます。

https://social.msdn.microsoft.com/Forums/ja-JP/629b0866-ef0d-4a73-b7d6-ba3ff155b447/c-navigate2?forum=vcgeneralja
[ 親 88878 / □ Tree ] 返信 編集キー/

▲[ 88882 ] / ▼[ 88884 ]
■88883 / 2階層)  Re[2]: C++ Navigate2 画面更新後のHTMLDocume
□投稿者/ 邪魔 (1回)-(2018/10/10(Wed) 09:48:48)
貼らないでください、迷惑です
[ 親 88878 / □ Tree ] 返信 編集キー/

▲[ 88883 ] / ▼[ 88886 ]
■88884 / 3階層)  Re[3]: C++ Navigate2 画面更新後のHTMLDocume
□投稿者/ びぎなー青ドンちゃん (9回)-(2018/10/10(Wed) 10:13:20)
WebSurfe 様 邪魔 様

ご指摘頂きありがとうございます。
マナーがなっておらずC++勉強以前の問題でした。

大変申し訳ございませんでした。
マルチポストとなってしまった掲示板のほうはクローズしました。


WebSurfe 様
マルチポストぐぐってきました。
お恥ずかしい限りでございます。








[ 親 88878 / □ Tree ] 返信 編集キー/

▲[ 88884 ] / ▼[ 88887 ]
■88886 / 4階層)  Re[4]: C++ Navigate2 画面更新後のHTMLDocume
□投稿者/ WebSurfer (1620回)-(2018/10/10(Wed) 11:04:35)
No88884 (びぎなー青ドンちゃん さん) に返信

ここはマルチポスト歓迎という人もいるようなので、ここに限ればセーフだと思います。

ただ、それでも、他でも質問していることと、その URL を書いておくのが良いと思います。


[ 親 88878 / □ Tree ] 返信 編集キー/

▲[ 88886 ] / 返信無し
■88887 / 5階層)  Re[5]: C++ Navigate2 画面更新後のHTMLDocume
□投稿者/ びぎなー青ドンちゃん (10回)-(2018/10/10(Wed) 11:27:07)

WebSurfer 様

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

C#でのwebbrowserの件のみならず
本投稿においてもコメント頂きありがとうございます。


質問内容についても自分で色々試しながら回答を待ちたい次第でございます。
引き続きよろしくお願いいたします。


[ 親 88878 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -