| 
          
            □投稿者/ びぎなー青ドンちゃん (8回)-(2018/10/09(Tue) 12:30:25)
              | ■88878 / inTopicNo.1) | C++ Navigate2 画面更新後のHTMLDocume |  
 
          
            
              
                |  | 分類:[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;
 }
 
 
 
 
 
 他の方のサイトを調べて勉強中ですが行き詰りました。
 どのようにすれば画面を更新させることができますでしょうか。
 
 何卒ご協力、ご教示頂きたく宜しくお願い致します。
 
 
 |  |