※ ChatGPTを利用し、要約された質問です(原文:起動済のIEから.NET FrameworkのHtmlDocumentを取得できますか?)
起動済のIEから.NET FrameworkのHtmlDocumentを取得できますか?
このQ&Aのポイント
起動しているInternet Explorerのオブジェクトから、.NET FrameworkのHtmlDocumentクラス(System.Windows.Forms名前空間)のオブジェクトを取得する方法を探しています。
mshtml.HTMLDocumentを使ってHTMLを解析するとCOMオブジェクトの解放が難しいので、.NET Frameworkの中で操作したいと考えています。
しかし、mshtml.HTMLDocumentからSystem.Windows.Forms.HtmlDocumentにキャストするときにエラーが発生しています。System.InvalidCastExceptionが出ています。
起動済のIEから.NET FrameworkのHtmlDocumentを取得できますか?
【環境・言語】Windows XP + IE6 + Visual Basic 2008
既に起動しているInternet ExplorerのオブジェクトをShellWindowsから探して、SHDocVw.InternetExplorer型の変数(objIE)に代入してあります。
Dim objIE As SHDocVw.InternetExplorer
'ShellWindowsから目的のIEオブジェクトを探してobjIEに代入
ここから、mshtml.HTMLDocumentを取得するところまでは分かります。
Dim objDoc As mshtml.HTMLDocument = CType(objIE.Document, mshtml.HTMLDocument)
これではなくて、.NET FrameworkのHtmlDocumentクラス(System.Windows.Forms名前空間)のオブジェクトを取得することはできるでしょうか?
↓のように無理やりやってみたら、
Dim objDoc2 As System.Windows.Forms.HtmlDocument = CType(objIE.Document, System.Windows.Forms.HtmlDocument)
↓のようなエラーが出ました。
System.InvalidCastException はハンドルされませんでした。
Message="型 'mshtml.HTMLDocumentClass' の COM オブジェクトをクラス型 'System.Windows.Forms.HtmlDocument' にキャストできません。COM コンポーネントを表す型のインターフェイスを COM コンポーネントを表さない型にキャストすることはできません。ただし、基になる COM コンポーネントがインターフェイスの IID の QueryInterface 呼び出しをサポートする場合は、インターフェイスにキャストすることができます。"
mshtml.HTMLDocumentを使ってHTMLを解析していくと、COMオブジェクトの解放が大変そうなので、できれば.NET Frameworkの中で操作したいと思っています。逆(.NET Framework→COM)はHtmlDocument.DomDocumentで簡単に出来るようですが、COMから.NET Frameworkへの変換は出来ないんでしょうか?
お礼
なるほど、コンストラクタがないから無理、と考えればいいんですね。勉強になりました。 非表示のWebBrowserを使う方法もなるほどと思いました。でも、問題のサイトはログインが必要なサイトで、WebBrowserにURLを渡しても上手く表示されませんでした。また、その後も元のIEの画面上でINPUTやSELECTに必要なデータをセットしてボタンをクリックして次の画面で・・・、という風にやっていきたいので、非表示のWebBrowserを使うやり方は残念ながらできません。 あきらめて別の方法を考えようと思います。ご回答ありがとうございました。