最前面に表示されているIEのウインドウをobjIEにする

Microsoft Visual Studio 2005。
タイトル通りだが、表示されているIEのウィンドウをobjIEに代入してから色々と作業をしたい。IEの複数のウィンドウが開いているなら、最前面のウインドウに対して作業を行いたい。このためにどうするか、散々考えトライアンドエラーの繰り返しでようやく形になったので、ここにメモしておく。

ウィンドウのZオーダーを数値で把握できないのか、と調べたが判らなかった。代わりに、EnumWindowsを利用して、Zオーダーの順(最初は最前面のウインドウ次に2番目のウィンドウ・・・となるようだ)でウィンドウを列挙することにした。列挙している途中で、ウィンドウタイトルに"Internet Explorer"が含まれているなら、それはIEのウィンドウなのでその時点でコールバック関数の処理を打ち切り、そのウィンドウハンドルを変数に保持する。

ウィンドウハンドルから、objIEに直接オブジェクトを代入できればいいのだが方法が(あるのかどうかも)判らない。
仕方無いので別の方法を取る。so = CreateObject("Shell.Application")でso(ShellObject)を作り、そのオブジェクトのウィンドウをFor Eachで調べ、保持したウィンドウハンドルと同じウィンドウハンドルがあった場合、そのウィンドウオブジェクトが最前面のIEのウィンドウということになる。

これでようやく最前面のIEオブジェクトを、objIEに代入できて処理できるようになった。
ただし、IE7で複数のタブがある場合、最後のタブに対しての処理になるようだ(これは今後改善する予定)。

以上、用語はあまり正確では無いと思います。