[C#] Internet Explorer 실행 및 연동하기

2011. 7. 18. 15:23Others/C# 일반

Internet Explorer를 실행하여 특정 페이지에 접속시키고, 페이지 로드가 완료되거나 사용자가 특정 반응을 보일 때 그 정보를 받아서 처리해야 하는 WPF Application을 작성해야 하는 경우가 있었는데 InternetExplorer object를 이용하여 해결할 수 있었습니다.

InternetExplorer Object

InternetExplorer object는 OS에 설치된 Internet Explorer를 실행시키고 실행된 IE의 Property, Event, Method를 직접 참조하여 연동할 수 있는 기능을 제공합니다.

자세한 정보는 아래 링크에서 확인하실 수 있습니다.
http://msdn.microsoft.com/en-us/library/aa752084%28v=vs.85%29.aspx

제한사항

InternetExplorer Object를 사용하기 전에 고려해야하는 제한사항은 다음과 같습니다.

  • InternetExplorer object로 실행된 Internet Explorer는 자신을 실행한 Application의 Main Thread에 영향을 받게됩니다. 즉 Application의 Main Thread가 Sleep되거나 CPU자원을 독차지 하고 있으면 InternetExplorer는 아무 동작을 하지 않고 Block되게 됩니다. 어떤 Thread에서 생성했는지 여부와 관계없이 InternetExplorer Object는 Main Thread의 영향을 받게 되므로 구현 시 참고가 필요합니다.

    따라서 Internet Explorer가 자신을 실행한 Application의 동작과 관계없이 작동하게 하기위해서는 InternetExplorer Object를 Main Thread에서 실행하고, 다른 Thread에서 InternetObject와 통신하는 방법을 선택해야 합니다.

  • Windows 98, Windows CE4.0, Internet Explorer 4.0 이상이 설치된 환경에서만 동작합니다.
  • InternetExplorer object로 Browsing되는 내부 HTML Contents에는 접근/수정하실 수 없습니다.

구현

using SHDocVw;
public void openInternetExplorer(string url)
{
    SHDocVw.InternetExplorer objIE = new SHDocVw.InternetExplorer();
    
    object Empty = 0;
    object URL = "http://www.google.com/";

    objIE.Top = 100;
    objIE.Left = 100;
    objIE.Width = 1024;
    objIE.Height = 900;
    objIE.Visible = true;
    objIE.Navigate2(ref URL, ref Empty, ref Empty, ref Empty, ref Empty);

    objIE.NavigateError += new SHDocVw.DWebBrowserEvents2_NavigateErrorEventHandler(objIE_NavigateError);
    objIE.NavigateComplete2 += new SHDocVw.DWebBrowserEvents2_NavigateComplete2EventHandler(objIE_NavigateCompleted2);
}
private void objIE_NavigateCompleted2(object sender, ref object URL)
{
    Console.WriteLine("navigate completed:" + URL.ToString());
}
private void _objIE_BeforeNavigate2(object sender, ref object URL, ref object Flags, ref object Target, ref object PostData, ref object Headers, ref bool Cancel)
{
    Console.WriteLine("Before Navigate:" + URL.ToString());
}

기타 참고사항

  • InternetExplorer object는 SHDocVw.dll에 포함되어 있으며 운영체제의 System32 Directory에 포함되어 있습니다.