※ ChatGPTを利用し、要約された質問です(原文:【続・IEを操作したい】)
C++で既に開かれているIEを操作する方法
このQ&Aのポイント
C++でSystem.Windows.Forms.WebBrowserを使って既に開かれているIEを操作する方法について説明します。
IEのウィンドウを羅列する方法と各タブで任意のページを取得する方法を解説します。
システムのメンテナンス性を考慮して、System.Windows.FormsのHTML操作系のクラスを用いて操作を行います。
C++で、
System.Windows.Forms.WebBrowser を使って、
既に開かれているIEを操作したいです。
Shdocvw.dll を間接的に使うのはアリで、
Shdocvw.dll を直接は使わずに行いたいです。
(.NETのラッパーを使っても良いですし、COMインタフェースを使っても良いです。
実質、やっていることは同じなのにナゼ?と感じると思うのですが、色々事情があるのです。)
調べて、結構分かってきているつもりなのですが、(2)の部分で困っています。
(1)IEのウィンドウを羅列する。
IShellWindows::FindWindowSW
で取っています。
(2)そのIEの各タブで、任意のページ(例えばhttps://www.google.co.jp)があったら、それをIEオブジェクトに代入。
(備考:試したこと)
IDispatch* の
QueryInterface を使って、
IWebBrowser2*
IHTMLDocument2*
などと、段々掘り下げていって、HTMLElementを操作しようとしていたのですが、、
(要件)
システムのメンテナンス性というか、
誰でもプログラムを修正できるようにするために、
System.Windows.Forms の配下のHTML操作系のクラスで取り扱いたいのです。
何卒宜しくお願いします。
***********************************************************
これは想像ですが、
Shell.Applicationのインスタンスを作っておいて、
現在のウィンドウのリストから、Windows のアイテムを取って、
そのアイテム(ウィンドウ?)の名前?クラス?を取って、
path == "iexplore.exe" で実行されているものであるなら、
IEオブジェクトに代入というようなことができたりするのかなぁ、、
と捉えています。
お礼
ありがとうございます! Shdocvw.dll のインポートの部分は行わずに、 comapi のincludeに抑えて、.NET のクラスに詰め替えようと思います! このサンプル、 マネージコードと、ネイティブコードの混在の例としても良さそうですね!