Advice on how to obtain HTML from a specific instance of IE running on my desktop

I have a .NET 2.0 (C#) WinForms application running on windows desktop.  From this application, I need to access the HTML (as a string) in an instance of IE (V6/V7/V8?) also running on that desktop.  I have the window handle for the IE instance.

My question is - what is the best way to access (read-only) the HTML for the currently active page in IE (6/7/8?)?   I am aware of two methods:  

First would be to install the PIAREDIST.exe and use MSHTML.  This presents the problem of installing the PIAREDIST everywhere and i dont know if its supported in IE 7/Vista or IE 8?

Second would be to build an IE add-on.  This is more complicated for sure, but it may be more robust and better supported going forward.

Maybe there is another way?

I welcome all knowledgable advice on this.
RXCTOAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Bob LearnedCommented:
Try something like this:

Add a COM reference to 'Microsoft Internet Controls' to the project.
Add a .NET reference to Microsoft.mshtml to the project.

Example:
Dictionary<string, string> windowList = InternetExplorerWindows.GetWindows()

Key = "URL", and Value = "HTML"
// Add a COM reference to 'Microsoft Internet Controls' to the project. 
// Add a .NET reference to Microsoft.mshtml to the project. 
 
// NOTE: 
// Don't add an Imports mshtml if you want your Intellisense to work. 
 
using System;
using System.Collections.Generic;
using SHDocVw;
 
public class InternetExplorerWindows
{
 
    public static Dictionary<string, string> GetWindows()
    {
        Dictionary<string, string> list = new Dictionary<string, string>();
        foreach (InternetExplorer window in new ShellWindows())
        {
 
            // Skip Windows Explorer instances, since the Document type is IShellFolderViewDual2. 
            if (window.Document is mshtml.HTMLDocument)
            {
                list.Add(window.LocationURL, ((mshtml.HTMLDocument)window.Document).body.innerHTML);
            }
        }
        return list;
    }
 
    public static Dictionary<string, string> GetIFrameHTML(string frameID)
    {
        Dictionary<string, string> list = new Dictionary<string, string>();
        foreach (InternetExplorer window in new ShellWindows())
        {
 
            // Skip Windows Explorer instances, since the Document type is IShellFolderViewDual2. 
            if (window.Document is mshtml.HTMLDocument)
            {
                mshtml.HTMLDocument doc = (mshtml.HTMLDocument)window.Document;
                if (doc.getElementById(frameID) != null)
                {
                    mshtml.HTMLIFrame frame = (mshtml.HTMLIFrame)doc.getElementById(frameID);
                    mshtml.HTMLWindow2 window2 = (mshtml.HTMLWindow2)frame.contentWindow;
                    mshtml.IHTMLDocument2 windowDocument = (mshtml.IHTMLDocument2)window2.document;
                    list.Add(window.LocationName, windowDocument.body.outerHTML);
                }
            }
        }
        return list;
    }
 
}

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
.NET Programming

From novice to tech pro — start learning today.