본문 바로가기

개발자/C++(Linux, Window)

c#에서 IE 컨트롤하기

반응형

C#에서 웹브라우져를 컨트롤하는 방법은 크게 직접 IE와 같은 외부 웹브라우져를 띄워서 이를 컨트롤 하는 것과 윈폼과 같은 C# 프로그램 내에 WebBrowser 컨트롤을 삽입하고 이를 제어하는 방식이 있다. 여기서는 전자의 방식을 알아본다.

C#에서 IE를 띄우기 위해서는 Shell Document Object and Control Library라고 불리우는 SHDocVw.dll 을 참조하여 사용한다. 이 DLL은 프로젝트 레퍼런스 추가에서 COM 탭에서 추가하게 되는데, COM DLL이므로 Interop 방식으로 사용하게 된다. (주: COM 탭에 없는 경우 Browse 해서 Windows 폴더 밑의 System32 에서 찾아 추가)

IE를 띄우기 위해서는 아래 예제에서 처럼 SHDocVw.InternetExplorer 객체를 생성하면 된다. (주: SHDocVw.InternetExplorer는 인터페이스명이며, 이 인터페이스를 구현한 클래스명은 SHDocVw.InternetExplorerClass 이다. 만약 VS2012에서 이 클래스명을 사용한다면, Interop type 'SHDocVw.InternetExplorerClass' cannot be embedded. Use the applicable interface instead 라는 에러가 발생할 수 있다. 이 에러를 막기 위해서는 SHDocVw 참조 레퍼런스의 클릭하고 속성창에서 Embed Interop Types를 false로 한다. Embed Interop Types 기능은 DLL의 인터페이스만을 정적 링크할 때 사용하는데, 구체적 코드를 갖는 클래스명을 사용하지 못하게 한다)

IE를 띄운 후, IWebBrowserApp 인터페이스를 얻고 Navigate() 메서드를 호출하면 특정 사이트로 이동하게 된다. 아래 예제는 IE로 구글 웹사이트를 띄운 후, 5초후에 IE를 닫는 코드이다.


예제

using SHDocVw;
using System.Threading;

namespace IEApp
{
    class Program
    {
        static void Main(string[] args)
        {                        
            var ie = new InternetExplorer();
            // var ie = new InternetExplorerMedium(); // InPrivate 모드
            var webBrowser = (IWebBrowserApp)ie;
            webBrowser.Visible = true;

            webBrowser.Navigate("http://www.google.com");

            Thread.Sleep(5000);
            webBrowser.Quit();
        }
    }
}

 

반응형