원본 출처: http://ljh131.tistory.com/68
하지만 C#으로 만들면 정말 쉽습니다.
우선 전 코드 프로젝트를 참고했습니다.
Band Objects - .NET 2.0 Redux
http://www.codeproject.com/csharp/BandObjects20.asp?select=1819328&df=100&forumid=306921&exp=0
위의 소스 파일은 코드 프로젝트의 소스를 사용하기 쉽게 약간 수정한 파일입니다. 기본 구조는 코드 프로젝트 소스와 마찬가지로 BandObject클래스를 상속받는 것입니다.
우선 다음 두 개의 레퍼런스를 추가하도록 합니다. COM의 MSHTML(Microsoft HTML Object Library)과 SHDocVw(Microsoft Internet Controls) 입니다. 두 레퍼런스를 추가하면 Object Browser에서 이들 어셈블리를 볼 수 있습니다.
다음 단계는 BandObject클래스를 상속받아 실제 툴바를 구현하는 단계입니다. 아래 코드는 사용자 참여 웹 툴바에서 사용된 예이며, 툴바와 BHO 구현에 필요한 핵심적인 코드만 적어 놓았습니다. Guid는 자신의 Guid를 적으세요.
1 [Guid("719FAB8A-8E67-4ba6-915D-4EE1AD3A2CEE")]
2 [BandObject("사용자 참여 웹 툴바", BandObjectStyle.Horizontal | 3 BandObjectStyle.ExplorerToolbar, HelpText = "사용자 참여 웹 툴바")] 4 public class UpwBandObject : BandObject 5 { 6 public UpwBandObject() 7 { 8 InitializeComponent(); 9 10 minSize = new Size(100, 27); // 최소 크기를 반드시 적어줘야 합니다. 11 12 SetSiteEvent += new SetSiteEventHandler(UpwBandObject_SetSiteEvent); 13 ShowDWEvent += new ShowDWEventHandler(UpwBandObject_ShowDWEvent); 14 } 15 private void UpwBandObject_ShowDWEvent(bool fShow) 16 { 17 toolbarVisible = fShow; 18 19 RefreshCurrentSite(); 20 } 21 22 private void UpwBandObject_SetSiteEvent(object pUnkSite) 23 { 24 if (pUnkSite != null) 25 { 26 // add events 27 webBrowserClass.BeforeNavigate2 += 28 new DWebBrowserEvents2_BeforeNavigate2EventHandler(webBrowser_BeforeNavigate2); 29 webBrowserClass.NavigateComplete2 += 30 new DWebBrowserEvents2_NavigateComplete2EventHandler(webBrowser_NavigateComplete2); 31 webBrowserClass.DocumentComplete += 32 new DWebBrowserEvents2_DocumentCompleteEventHandler(webBrowser_DocumentComplete); 33 } 34 else 35 { 36 // remove events 37 webBrowserClass.BeforeNavigate2 -= 38 new DWebBrowserEvents2_BeforeNavigate2EventHandler(webBrowser_BeforeNavigate2); 39 webBrowserClass.NavigateComplete2 -= 40 new DWebBrowserEvents2_NavigateComplete2EventHandler(webBrowser_NavigateComplete2); 41 webBrowserClass.DocumentComplete -= 42 new DWebBrowserEvents2_DocumentCompleteEventHandler(webBrowser_DocumentComplete); 43 } 44 } 45 46 private void webBrowser_BeforeNavigate2 47 (object pDisp, ref object URL, ref object Flags, ref object TargetFrameName, 48 ref object PostData, ref object Headers, ref bool Cancel) 49 { 50 } 51 52 private void webBrowser_NavigateComplete2(object pDisp, ref object URL) 53 { 54 } 55 56 private void webBrowser_DocumentComplete(object pDisp, ref object URL) 57 { 58 } 59 60 private void Navigate(string url) 61 { 62 object flags = null; 63 object targetFrameName = null; 64 object postData = null; 65 object headers = null; 66 67 webBrowserClass.Navigate(url, ref flags, ref targetFrameName, ref postData, ref headers); 68 } 69 } |
using System.Windows.Forms; using System.Runtime.InteropServices; using SHDocVw; using System.Reflection; using System.Drawing; using System.ComponentModel; using Microsoft.Win32; |
UserControl을 상속받으면 Visual Studio에서는 Designer로 폼을 편집할 수 있습니다. View Designer를 클릭해서 나오는 화면이 툴바에 나오게 될 화면입니다. 그 부분은 개발하고자 하는 툴바에 맞춰서 디자인 하시면 됩니다.
마지막 단계는 실제 툴바를 익스플로러에 등록하는 과정입니다. 우선 프로젝트 속성의 Assembly Information에서 Make assembly COM-Visible을 체크하고 컴파일을 합니다. 또 Strong name을 위해 Signing assembly (.snk)가 필요한데 이것 역시 프로젝트 속성에서 만들 수 있습니다.
그리고 빌드 후에 다음 명령을 실행 시킵니다. (Post build event에 등록 해놓으면 되겠죠.)
cd $(TargetDir)
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil" /if Interop.SHDocVw.dll
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil" /if $(TargetFileName)
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm" /unregister $(TargetFileName)
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm" /codebase $(TargetFileName)
익스플로러를 열면 툴바 영역에서 등록된 툴바가 메뉴에 표시됩니다.
디버깅은 프로퍼티의 Start Action에 externel program으로 익스플로러를 지정하면 됩니다.
'Languages > C#' 카테고리의 다른 글
[ C# ] C# FTP Download (3) | 2010.07.21 |
---|---|
[ C# ] Default Sound Device 변경하기 (0) | 2010.07.19 |
[ C# ] XML 쓰고 읽기 (0) | 2010.05.21 |
[ C# ] Network 연결 확인 (0) | 2010.05.21 |
소수점 자릿수 출력하기 (0) | 2009.04.11 |