천객만래 [千客萬來] (It has an interminable succession of visitors)

VC++ BHO 만들기에서 ATL 단순개체 마법사 옵션 설정화면
프로젝트 생성후 BHO(Browser Helper Objects)만들 때 유용하게 사용하기 바람





Posted by SB패밀리
온라인 키워드 검색광고 시장에서 BHO(Browser Helper Objects)를 이용하여 일반적으로 많이 사용되는 광고 형태의 분류이다.

주소창검색
웹 브라우저의 주소창에서 도메인 주소가 아닌 검색 키워드를 입력할 때 나타나는 배너 광고 또는 웹페이지 광고
주소창검색이란 웹 사이트에 관계없이 웹 브라우저 주소창에서 도메인이 아닌 한글이나 영문 키워드를 입력하는 경우 특정 검색사이트의 검색결과를 보여주거나 광고 페이지로 이동 또는 팝업 광고 등을 노출하는 웹페이지 광고를 말한다.

팝업 (창)
웹 브라우저가 새로 열릴 때마다 새로운 창(IE window)과 함께 나타나는 배너 광고 또는 웹페이지 광고
팝업 광고는 특정 웹페이지를 새로 열 때마다 새로 뜨는 창과 함께 그 위로 나타나는 윈도우 타입의 배너광고 또는 웹페이지 광고를 의미한다

팝언더 (창)
웹페이지 아래로 나타나 사용자가 볼 때까지 기다리는 팝업 광고
웹 브라우저가 새로 열릴 때마다 새로운 창(IE window)와 함께 창 아래로 나타나는 배너 광고 또는 웹페이지 광고를 말한다.

엔딩팝업 (창)
특정 사이트 접속후에 사용자가 사이트를 떠나거나 웹브라우저를 종료할 때 팝업창을 노출하는 배너 광고 또는 웹페이지 광고
팝업광고의 한 형태로 사용자의 불편함을 초래할 수 있다.

팝업탭
웹 페이지가 현재 탭에서 또는 새로 열릴 때마다 새로운 탭(IE Tab)이 나타나고 그 탭으로 이동되는 배너 광고 또는 웹페이지 광고
팝업탭 광고는 포탈사이트에서 검색을 하거나 특정 웹페이지를 열 때마다 새로 뜨는 탭과 함께 나타나는 배너광고 또는 웹페이지 광고를 의미한다
팝업광고처럼 광고가 사용자의 웹 페이지 전면에 나오기 때문에 사용자의 불편함을 초래한다.

팝언더탭
웹 페이지가 현재 탭에서 열릴 때마다  새로운 탭(IE Tab)이 나타나고 사용자가 그 탭을 볼 때까지 기다리는 배너 광고 또는 웹페이지 광고
팝언더웹 광고는 포탈사이트에서 검색을 하거나 특정 웹페이지를 열 때마다 새로 뜨는 탭이 나타나며 사용자가 탭을 볼 때까지 기다리는 배너 광고 또는 웹페이지 광고를 말한다.
팝업광고처럼 광고가 사용자의 웹 페이지에 숨겨져 나오기 때문에 사용자의 불편함이 팝업광고나 팝업탭보다 적다.

Posted by SB패밀리

best practice is to write a BHO which will load your BandObject.

A BHO has to implement IObjectWithSite

--- IObjectWithSite.cs ---

using System;
using
System.Runtime.InteropServices;
namespace
<YOUR_NAMESPACE_HERE>
{
   [C
omVisible(true)]
   [
InterfaceType(ComInterfaceType
.InterfaceIsIUnknown)]
   [
Guid("FC4801A3-2BA9-11CF-A229-00AA003D7352"
)]
  
public interface IObjectWithSite
  
{
     
[
PreserveSig]int SetSite([MarshalAs(UnmanagedType.IUnknown)] object site);
      [
PreserveSig]int GetSite(ref Guid guid, out IntPtr ppvSite);
  
}
}

--- BHO.cs ---

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using SHDocVw;

namespace <YOUR_NAMESPACE_HERE>
{

   [ComVisible(true)]
   [
Guid("<YOUR_GUID_HERE>")]
   [ClassInterface(ClassInterfaceType.None)]

   public class BHO : IObjectWithSite
  
{
     
private InternetExplorer explorer;
    

      #region ComRegisterFunction
     
public static string BHOKEYNAME = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects"

      [ComRegisterFunction]
     
public static void RegisterBHO(Type t)
      {
        
RegistryKey key = Registry.LocalMachine.OpenSubKey(BHOKEYNAME, true);
         if (key == null)
         
{
           
key = Registry.LocalMachine.CreateSubKey(BHOKEYNAME);
        
}

         string guidString = t.GUID.ToString("B");
        
RegistryKey bhoKey = key.OpenSubKey(guidString, true);

         if (bhoKey == null)
         {
            bhoKey = key.CreateSubKey(guidString);
         }

         // NoExplorer:dword = 1 prevents the BHO to be loaded by Explorer
        
string _name = "NoExplorer";
        
object _value = (object)1;
         bhoKey.SetValue(_name, _value);
         key.Close();
         bhoKey.Close();
      }

      [ComUnregisterFunction]
     
public static void UnregisterBHO(Type t)
      {
        
RegistryKey key = Registry.LocalMachine.OpenSubKey(BHOKEYNAME, true);
        
string guidString = t.GUID.ToString("B");

         if (key != null)
         {
            key.DeleteSubKey(guidString,
false);
         }
      }

      #endregion

      #region IObjectWithSite Members
      public int SetSite(object site)
      {
        
if (site != null)
         {
            explorer = (
InternetExplorer)site;
            ShowBrowserBar(
true);
         }
      
   return 0;
      }

      public int GetSite(ref Guid guid, out IntPtr ppvSite)
      {
        
IntPtr punk = Marshal.GetIUnknownForObject(explorer);
        
int hr = Marshal.QueryInterface(punk, ref guid, out ppvSite);
         
Marshal.Release(punk);
        
return hr;
      }

      #endregion

      #region Private Functions

      private void ShowBrowserBar(bool bShow)
      {
         
object pvaClsid = (object)(new Guid("GUID_OF_YOUR_BANDOBJECT_HERE").ToString("B"));
        
object pvarShow = (object)bShow;
        
object pvarSize = null;
        
        
if (bShow) /* hide Browser bar before showing to prevent erroneous behavior of IE*/
        
{
           
object pvarShowFalse = (object)false;
            explorer.ShowBrowserBar(
ref pvaClsid, ref pvarShowFalse, ref pvarSize);
         }

         explorer.ShowBrowserBar(ref pvaClsid, ref pvarShow, ref pvarSize);
      }

      #endregion

   }
}

Posted by SB패밀리