• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【続・IEを操作したい】)

C++で既に開かれているIEを操作する方法

このQ&Aのポイント
  • C++でSystem.Windows.Forms.WebBrowserを使って既に開かれているIEを操作する方法について説明します。
  • IEのウィンドウを羅列する方法と各タブで任意のページを取得する方法を解説します。
  • システムのメンテナンス性を考慮して、System.Windows.FormsのHTML操作系のクラスを用いて操作を行います。

質問者が選んだベストアンサー

  • ベストアンサー
  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.2

サンプル書きました。 「IHTMLDocument2からのSystem::Windows::Forms::HtmlDocument変換」 https://gist.github.com/kumatti1/36422d319017d2ad10a7

paranoia23
質問者

お礼

ありがとうございます! Shdocvw.dll のインポートの部分は行わずに、 comapi のincludeに抑えて、.NET のクラスに詰め替えようと思います! このサンプル、 マネージコードと、ネイティブコードの混在の例としても良さそうですね!

その他の回答 (1)

noname#212058
noname#212058
回答No.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 のオブジェクトとは別のイン スタンスになるので、今回の目的には沿わないでしょうし。

paranoia23
質問者

お礼

ありがとうございます。 大きなヒントになりました。

paranoia23
質問者

補足

ありがとうございます。 Shdocvwのラッパーが使えるということで、こう光明が見えてきました。 ただ、自分の力不足で、 IShellWindows::FindWindowSW ののちに、 Shdocvwのラッパーに代入する方法がわからず困っています。 お力添えを頂くことはできませんでしょうか?? (×_×) IDispachポインタからIWebBrowser2ptr を取ったあと、 それをSYSTEM::Windows::Forms::Webbrowser に代入するのも、 IDispachポインタからIHtmlDocument2Ptr まで落としてから それをSYSTEM::Windows::Forms::HtmlDocument に代入するのも、 やり方として間違っているっぽいというのは挙動から推測できるのですが。。