In your C# solution, if you add a reference to the COM component named "Microsoft Internet Controls", you should be able to access the SHDocVw namespace from a C# console app, without having to do anything unusual.
Once I did that (in VS 2008) I was then able to use SHDocVw.ShellWindows, SHDocVw.IWebBrowser2, and so forth. For example:
SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindowsClass();
foreach (SHDocVw.IWebBrowser2 ie in shellWindows)
{
Console.WriteLine("ie.LocationURL: " + ie.LocationURL);
if (ie.LocationURL.Contains("foo.com"))
ie.Quit();
}
EDIT: When using VS 2012/.NET 4.x, you can use the approach below instead, to work around the error "Interop type 'SHDocVw.ShellWindowsClass' cannot be embedded."
using SHDocVw;
// ... snip ...
SHDocVw.ShellWindows shellWindows = new ShellWindows();
foreach (SHDocVw.IWebBrowser2 ie in shellWindows)
{
Console.WriteLine("ie.LocationURL: " + ie.LocationURL);
if (ie.LocationURL.Contains("foo.com"))
ie.Quit();
For more information on the VS 2012 issue, see this answer:
C# How to get current URL from the IE?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…