- ベストアンサー
"Internet Explorer_Server"クラスのウィンドウからURLを取得する方法
こんにちは、boundaryといいます。 "Internet Explorer_Server"というウィンドウクラスの からURLを取得する方法をご存知の方教えていただけないで しょうか? Internet ExplorerからURLを取得する事はできるのですが・・・ どうかよろしくおねがいします。 windows2000sp3 vc6sp5使ってます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Internet ExplorerからURLを取得するにはInternetExplorerが公開しているCOMインターフェースを使用します。 IWebBrowser2インターフェースから取得するのが一般的で、get_LocationURLメソッドから取得できます。 本題の"Internet Explorer_Server"は、Internet Explorerが使用しているブラウザーコントロールのウィンドウのクラス名です。 このウィンドウからCOMインターフェースを取得することが必要になります。 手順としては、以下のようになります。 1.何らかの手段で"Internet Explorer_Server"のウィンドウハンドル を取得する。 2.取得したウィンドウハンドルからIHTMLDocument2インターフェース のポインタを取得する。 IHTMLDocument2->get_URL メソッドからURLを取得することも可能 です。 ※IHTMLDocument2からIWebBrowser2インターフェースポインタを 取得することも可能です。 問題は2のIHTMLDocument2インターフェースを取得することですが、 以下の処理で取得できます。(エラー処理は省略してあります) #include <exdisp.h> #include <mshtml.h> #include <oleacc.h> IHTMLDocument2* pHTMLDocument2; HINSTANCE hInstance; hInstance = LoadLibrary(_T("OLEACC.DLL")); UINT nMsg; nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT")); SendMessageTimeout(hwnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes); LPFNOBJECTFROMLRESULT pfObjectFromLresult; pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress(hInstance, _T("ObjectFromLresult")); HRESULT hresult; hresult = (*pfObjectFromLresult)(lRes, IID_IHTMLDocument2, 0, (void**)&pHTMLDocument2); BSTR bstrLocationURL; pHTMLDocument2->get_URL(&bstrLocationURL); pHTMLDocument2->Release(); SysFreeString(bstrLocationURL); ■ソースは変な個所で改行されているかも・・・
お礼
darkskyさん、回答ありがとうございます。 返事遅くなって申し訳ありません。 教えていただいたコードを元に試行錯誤してみようと思います。 この様な質問をした理由は、MSのとあるネットワーククライアントプログラム(だいたい察しはつくと思いますが) をシステムフックで制御したいと思い質問しました。 ですがその後、OleView.exeをながめていると該当プログラムのCOMオブトェクトの登録があるのを知り、現在COMの勉強中です。(^◇^) ありがとうございました。