2011. 7. 18. 15:23ㆍOthers/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에 포함되어 있습니다.
'Others > C# 일반' 카테고리의 다른 글
[C#] C# Data Type (0) | 2013.02.22 |
---|---|
[C#] Class Library의 Intellisense 공유하기 (0) | 2012.01.06 |
[C#] ANSI Encoding로 파일 저장하기 (0) | 2011.07.18 |
[C#] File, Directory 보안 설정 (0) | 2011.04.23 |
[C#] Version 자동 설정 및 BuildDateTime 구하기 (0) | 2011.04.15 |