■47882 / inTopicNo.1) |
IDisplayServicesへのキャスト方法 |
□投稿者/ jyo (1回)-(2010/03/17(Wed) 04:34:31)
|
分類:[C#]
[開発環境:VisualStudio2008 standard .NET framework3.5]
はじめまして。 IHTMLDocument2インタフェースをIDisplayServicesにキャストする方法について質問させてください。
すでに起動しているIEをハンドリングして、とあるhtmlエレメントの座標を取得しようとしています。 IEがフレーム構成の場合に座標の補正を行うため、IDisplayServicesインタフェースのTransformPointメソッドを利用しようとしています。 IDisplayServicesはIHTMLDocument2からキャストが出来るようなのですが、InvalidCastExceptionで失敗してしまいます。 (http://msdn.microsoft.com/en-us/library/aa752659(VS.85).aspx)
○失敗するコード ShellWindows sw = new ShellWindows(); SHDocVw.WebBrowser _ie;
//_ieにShellWindowsから取得したIEを代入(中略)
IHTMLDocument2 ihd2 = _ie.Document as IHTMLDocument2; IDisplayServices ids = ihd2 as IDisplayServices;
一方、System.Windows.Forms.WebBrowserから取得できるDocumentオブジェクトは、キャストが成功します。 ○成功するコード WebBrowser webBrowser1 = new WebBrowser(); webBrowser1.Navigate("URL"); IHTMLElement elm = webBrowser1.Document.GetElementById("適当なid").DomElement as IHTMLElement; IHTMLDocument2 doc2 = elm.document as IHTMLDocument2; IDisplayServices ids2 = doc2 as IDisplayServices;
質問内容ですが、 System.Windows.Forms.WebBrowserからならキャスト可能、SHDocVw.WebBrowserからはキャスト不可のように思えますが、コードにおかしな個所は無いでしょうか? プログラム中でIEを起動するのではなく、すでに起動しているIEのエレメントからIDisplayServicesへ持っていく方法はあるでしょうか? そもそもブラウザがフレーム構成の場合のエレメントの座標の取得方法が別にあるようでしたら、教えていただけますか?
--- 似たような話題はいくつか見つけましたが、どれも解決していないようでした。 ・起動済のIEから.NET FrameworkのHtmlDocument → ムリ http://okwave.jp/qa/q3873841.html ・WebClient で得た HTML を HtmlDocument で解析したいが WebBrowser がないと使えない? http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=45032&forum=7 ・cross-process martharingはムリ? http://social.msdn.microsoft.com/Forums/en/ieextensiondevelopment/thread/2d158f90-df91-444b-a697-9325bad6ec36 ・同じような問題(未解決) http://www.itwriting.com/phorum/read.php?3,1775,3398,quote=1
|
|