Not too long ago I needed to write some test setup code in C# to check for open IE windows.
The idea was to kill any running IE instances before entering the main portion of the test case - and just for reference, I wanted to record the URL that each closed IE window had been viewing.
My first thought was to use this common technique:
- Enumerate the SHDocVw.ShellWindows collection, looking for IE processes
- Use IE's IWebBrowser2 COM interface to interact with any IE instances found
Turns out this is a common question for C# projects - and there seem to be some overly convoluted solutions floating around.
However, one solution is quite easy - the key point is that the friendly name of the SHDocVw type library is "Microsoft Internet Controls".
So, if you add a reference to the "Microsoft Internet Controls" COM component in your C# project, you'll be able to use SHDocVw.ShellWindows and SHDocVw.IWebBrowser2.
This example code (for VS 2012) shows how to access the IWebBrowser2 interface of each running IE:
Back in the VS 2008 days, different code was used to accomplish the same thing:
Full disclosure - I also wrote a stackoverflow answer about this topic.