推しミネラルウォーターはありますか?

【環境・言語】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への変換は出来ないんでしょうか?

A 回答 (1件)

System.Windows.Forms.HtmlDocumentにコンストラクタが無いのでちょっと無理なように思います


非表示の WebBrowserコントロールなどに 取得したmshtml.HtmlDocuemnt.Urlなどを与えて WebBrowserのDocumentプロパティから取得といった方法になりそうです

細かい操作をしようとすれば HTMLElementを取得してこれのDomElementを使うといった方法になりそうです
HTMLElementクラスはHTMLタグ要素の一般的なプロパティしか装備していませんから …
    • good
    • 0
この回答へのお礼

なるほど、コンストラクタがないから無理、と考えればいいんですね。勉強になりました。

非表示のWebBrowserを使う方法もなるほどと思いました。でも、問題のサイトはログインが必要なサイトで、WebBrowserにURLを渡しても上手く表示されませんでした。また、その後も元のIEの画面上でINPUTやSELECTに必要なデータをセットしてボタンをクリックして次の画面で・・・、という風にやっていきたいので、非表示のWebBrowserを使うやり方は残念ながらできません。

あきらめて別の方法を考えようと思います。ご回答ありがとうございました。

お礼日時:2008/03/19 10:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!