掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
IWebBrowser2によるURLの取得 (ID:64194)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ちなみに >現在アクティブなインターネットエクスプローラの が微妙ですが、任意のウィンドウハンドルをもつIEを限定する場合、 SHDocVw::IWebBrowser2PtrのGetHWND(もしくはHWND)で取得できる値を HWND型にキャストすると判定できます。 但し、IEコンポーネントを使っているようなアプリ(たとえばSleipnirとか) を使っている場合、 pIE->GetHWND(); で取得しようとすると_com_errorが発生します。 なので、ここだけは邪道ですが、get_HWNDをつかって戻り値で成功しているか判定します。) 以下変更したコード // 指定したウィンドウハンドルを持つInternet Explorerの表示しているURLを取得する // 環境:Windows Xp Pro SP2/Visual C++ 6.0 Enter SP6/Internet Explorer 6.0 SP2 #include <windows.h> #import <shdocvw.dll> HRESULT GetIEURL( _bstr_t& url, const HWND target ) { HRESULT hr = S_OK; SHDocVw::IShellWindowsPtr pSW = NULL; try { hr = pSW.CreateInstance( __uuidof( SHDocVw::ShellWindows ) ); if ( FAILED( hr ) ) _com_issue_error( hr ); for ( long i = 0; i < pSW->Count; ++i ) { SHDocVw::IWebBrowser2Ptr pIE = NULL; if ( pIE = pSW->Item( i ) ) { long hWnd; if ( SUCCEEDED( pIE->get_HWND( &hWnd ) ) && ( reinterpret_cast< HWND >( hWnd ) == target ) ) { url = pIE->GetLocationURL(); break; } } } } catch (_com_error& e) { hr = e.Error(); } if ( pSW ) pSW.Release(); return hr; } int main() { if ( SUCCEEDED( ::CoInitialize( NULL ) ) ) { _bstr_t url; HWND target = ::FindWindow( TEXT( "IEFrame" ), NULL ); if ( target && SUCCEEDED( GetIEURL( url, target ) ) ) { ::MessageBox( NULL, url, TEXT( "URL" ), MB_OK ); } ::CoUninitialize(); } return 0; } ただ、ウィンドウハンドルがわかるのであれば、別にIWebBrowser2を使う必要もないかなぁと。 (SendMessageとか使っていけばEditにある文字列を取得することが出来そうな)
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.