- ベストアンサー
C++で既に開かれているIEを操作する方法
- C++でSystem.Windows.Forms.WebBrowserを使って既に開かれているIEを操作する方法について説明します。
- IEのウィンドウを羅列する方法と各タブで任意のページを取得する方法を解説します。
- システムのメンテナンス性を考慮して、System.Windows.FormsのHTML操作系のクラスを用いて操作を行います。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
サンプル書きました。 「IHTMLDocument2からのSystem::Windows::Forms::HtmlDocument変換」 https://gist.github.com/kumatti1/36422d319017d2ad10a7
その他の回答 (1)
.NETのラッパがOKなら、プロジェクトに「マネージドDLL」 として Microsoft Internet Controls (Shdocvw.dll) の参照を 追加した場合、Visual Studio .NET は 自動的に .NET の ラッパ Interop.SHDocVw.1.1.dll を作ります。プログラムコードから はラッパを介したアクセスになりますが、これは OKなのでしょ うか? (正直、IEを操作するならこの方法がいちばん簡単だと 思うのですが) IHTMLDocument2 のオブジェクト(DOM)を HtmlDocument クラス経由で操作するのは、厳しいと思いますけどね。HTML の解析目的で HtmlDocument に『変換』したことはあります が、その場合は変換先は元の IE のオブジェクトとは別のイン スタンスになるので、今回の目的には沿わないでしょうし。
お礼
ありがとうございます。 大きなヒントになりました。
補足
ありがとうございます。 Shdocvwのラッパーが使えるということで、こう光明が見えてきました。 ただ、自分の力不足で、 IShellWindows::FindWindowSW ののちに、 Shdocvwのラッパーに代入する方法がわからず困っています。 お力添えを頂くことはできませんでしょうか?? (×_×) IDispachポインタからIWebBrowser2ptr を取ったあと、 それをSYSTEM::Windows::Forms::Webbrowser に代入するのも、 IDispachポインタからIHtmlDocument2Ptr まで落としてから それをSYSTEM::Windows::Forms::HtmlDocument に代入するのも、 やり方として間違っているっぽいというのは挙動から推測できるのですが。。
お礼
ありがとうございます! Shdocvw.dll のインポートの部分は行わずに、 comapi のincludeに抑えて、.NET のクラスに詰め替えようと思います! このサンプル、 マネージコードと、ネイティブコードの混在の例としても良さそうですね!