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

[VC] IE에 사용자 툴바를 설치후에 기본으로 보이게 하는 방법





IE에 새 툴바밴드를 설치하고 새 IE를 실행했을때 기본으로 툴바가 IE에 보여지도록 하는 방법에 대한 문서이다. 혹자는 이것이 왜 필요하냐고 물을수도 있는데, 한마디로 필요하다. 

왜냐하면 설치를 했다면 당연히 눈여보여서 동작하는 것이 사용자의 기대동작이기 때문이다. 만약 IE에서 툴바를 켜는 방법을 모르는 사용자가 있다면 어떨까? 설치를 한 의미가 없어진다. 사용을 촉진시키고, UI를 보여줌으로써 관심을 일으키는 것이 마케팅일것이다.

1 툴바 DLL의 기본 설정을 이용하는 방법 

이 방법을 알아낸다면 밑에 있는 방법은 다 없어도 된다. 이 방법은 웹 검색과 구글검색으로도 쉽게 알아내지 못했다. IE의 툴바 레이아웃은 
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Toolbar
There are 3 sub keys: Explorer, ShellBrowser, WebBrowser'
In each of these sub-keys is the entry for ITBarLayout 
For IE Toolbars: The WebBrowser Sub-key directly affects IE.
For Windows Explorer Toolbars: The Explorer Sub-key directly affects Explorer.
The ShellBrowser sub-key may affect IE as well. Its effect on IE and Windows Explorer is unknown at this time, so if the first option doesn't work, delete the ITBarLayout value here as well.
Choose the relavent sub-key and right click where it says ITBarLayout and select Delete. 
The deleted value will automatically be recreated for you.

이런식으로 저장이 된다. 문제는 ITBarLayout에 레이아웃 구조체가 저장되는데 이 키를 지우면 모든 레이아웃 정보가 사라지고 IE가 디폴트로 툴바 레이아웃을 생성하는데, 이때 특정 툴바는 기본으로 뜬다는 것이다. 설치하고 나서 기본으로 뜨고 사용자가 안 보이게 하면 그때 부터 안 보인다. 이런 설정은 어떻게 하는 것일까? 만들때 어떤 옵션을 주는것 같기도 하고. 만약 방법을 찾게 되면 이 페이지에서 가장 강조되는 블럭으로 말들어 놓겠다.

2 html을 이용하는 방법 

이 방법은 해당 툴바를 Object 태그로 HTML에 삽입하는 방법이다. 다시 말해서 해당 COM객체를 IE에서 실행하라고 알리는 것이다. 설치가 끝나고 나서 인스톨러가 설치가 완료되었다는 깜찍하고 작은 IE를 띄우는것은 애교로 봐 줄만하다. 그 IE가 띄우는 페이지에 저 Object에 툴바의 클래스 아이디를 넣는다는 얘기이다. HTML에서는 COM객체를 로드할 것이고, 그 객체는 툴바DLL이기 때문에 당연히 IE에 리바영역에 나타날 것이다. 

문제점이있다. 어떤 툴바는 로드되지 않는다. 내가 뜨기를 원하는 툴바에서는 안 뜨고 다른 툴바는 성공적으로 뜨는 바람에 바로 다른 방법을 강구하기 시작했는데, 자기가 배포하려는 툴바가 이 방법으로 잘 되는지 확인해 볼 필요가 있다. 

주의할 점은 winxp sp2에서는 기본 보안설정으로는 DLL이 로드되지 않는다는 점이다., IE의 보안레벨에 의존적이다.

3 IE 메뉴를 이용하는 방법 

새로운 IE를 실행하면서 그 IE의 IEFrame핸들을 얻을 수 있는데 그 윈도우 핸들에 WM_COMMAND를 보내는 방법이다. 이 경우, 예를들면 Ctrl+N과 같은 IE의 기본적인 값은 spy++로 확인해 보면 항상 같다는 점을 알 수 있다. 그래서 테스트 결과 WM_COMMAND로 wParam에 그 값을 넣어서 보내면 정확히 그 메뉴가 실행된다. 이 점을 응용하면 보기-툴바에서 우리 툴바의 메뉴아이템의 ID를 구하기만 하면 되는 것이다. 그 ID는 항상 동적이다. 설치된 툴바의 갯수나 설치된 순서에 따라 다르기 때문이다. 그래서 IE의 메인메뉴를 HMENU를 구하고 거기서 모든 메뉴 아이템을 얻어서 우리가 원하는 메뉴 캡션을 찾아내면 그 메뉴 아이템의 ID가 우리가 찾는 ID가 되는 것이다.

[치명적 문제점]
메인메뉴의 HMENU 값을 구할 수가 없다? 일단 GetMenu(HWND) 는 메뉴가 없다. 왜 그럴까? IE의 메인메뉴는 메뉴바라고 하는 툴바에 올라가 있고, 팝업메뉴로 나타나기 때문이다. HMENU만 알아낸다면 확실히 효율적이고 안정적인 좋은 방법이다.

4 IWebBrowser2를 이용하는 방법 




STDMETHODIMP CShowBarObj::SetSite(IUnknown *pUnkSite)

(

 if (NULL != pUnkSite)

 {

  IWebBrowser2 *pBrowser = NULL;

  // Ensure that our site is an browser window

  HRESULT hr = pUnkSite->QueryInterface(IID_IWebBrowser2, (void **) &pBrowser);

  if (SUCCEEDED(hr))

  {

   // Display the band object (the Search bar in this case)

   VARIANT vtBandGUID, vtShow;

   vtBandGUID.vt = VT_BSTR;

   vtBandGUID.bstrVal = SysAllocString(OLESTR("{30D02401-6A81-11D0-8274-00C04FD5AE38}"));

   vtShow.vt = VT_BOOL;

   vtShow.boolVal = true;

   VARIANT vret;

   pBrowser->ShowBrowserBar(&vtBandGUID, &vtShow, &vret);

   SysFreeString(vtBandGUID.bstrVal);

   pBrowser->Release();

  }

 }

 return S_OK;

}




이 코드인데 이 코드를 툴바(툴바는 문제가 있는데 툴바는 켜지 않으면 DLL을 로드하지 않기 때문이다.)나 BHO에 넣으면 잘 동작한다. 그러나 IE를 실행하고 그 실행한 IE의 IWebBrowser2의 ShowBrowserBar를 호출하면 절대로 동작하지 않는다. 그것이 문제이다. 일단 그 이유를 모르겠다. 한가지 생각나는 이유라고는 TopLevel의 IWebBrowser2가 아니기 때문이 아닐까 싶기도 한데, 사실상 그런 이유때문은 아닌것 같다. 

아래 코드는 Activex에서 탑 레베의 IWebBrowser2를 얻는 코드이다. 나중에 참조해 볼 것.





#include <SHLGUID.h>

#define COMRELEASE(ptr)

if (ptr != NULL) 

{

ptr->Release();

   ptr = NULL;

}

IWebBrowser2 *browser = NULL;

STDMETHODIMP SetClientSite(IOleClientSite *pClientSite) 

{

  HRESULT hr = S_OK;

   IServiceProvider *isp, *isp2 = NULL;

    if (!pClientSite)

{

 COMRELEASE(browser);


else

{

hr = pClientSite->QueryInterface(IID_IServiceProvider, reinterpret_cast<void **>(&isp));

if (FAILED(hr)) 

{

hr = S_OK;

goto cleanup;

}

hr = isp->QueryService(SID_STopLevelBrowser, IID_IServiceProvider, reinterpret_cast<void **>(&isp2));

if (FAILED(hr))

{

hr = S_OK;

goto cleanup;

}

hr = isp2->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, reinterpret_cast<void **>(&browser));

if (FAILED(hr)) 

{

hr = S_OK;

goto cleanup;

}

cleanup:

// Free resources.

COMRELEASE(isp);

COMRELEASE(isp2);

return hr;

}

}


5 BHO를 이용하는 방법 

이 방법이 그나마 안정적이고 좋은방법 같다. ShowBrowserBar를 BHO에서 동작하도록 하는 것이다. BHO의 SetSite에서 우리가 원하는 툴바를 보이게 만들고 DLL을 등록해제해서 (레지스트리 삭제) 다음 IE에서는 이 DLL을 다시 로드하지 않도록 하는 방법이다. 

bho등록
IE를 안 보이게 실행
로드된 bho에서 우리가 원하는 툴바를 보이게 함
IE를 종료함 WM_CLOSE를 보내거나 ->Quit를 호출함
bho등록해제
bho dll삭제

와 같은 순서로 동작한다.

6 레이아웃 레지스트리를 조작하는 방법

레지스트리는 바이네리 데이타이다. 상식적으로 생각했을때 그건 IE내부에서만 사용되는 어떤 구조체일 것이고, 그 내막은 파악하기는 소스가 없다면 리버스엔지니어링이라고 불리는 삽질을 하는 수 밖에 없는 법이다. 당행스럽게도 나에겐 win2k src가 있었는데 없었다면 감히 삽질하려고 시도조차 하지 않았을 것이다. 그런데 그런 시도를 이미 한 사람이 있었으니 내가 감탄하지 않을 수 없었다. 구조체는


typedef struct tagCOOLBARSAVE
{
  UINT cbVer;
   UINT uiMaxTBWidth;
    UINT uiMaxQLWidth;
#ifdef UNIX
    BITBOOL fUnUsed : 28; // unused
#endif
  BITBOOL fVertical : 1; // The bar is oriented vertically
   BITBOOL fNoText :1; // "NoText"
    BITBOOL fList : 1; 
// toolbar is TBSTYLE_LIST (text on right) + TBSTYLE_EX_MIXEDBUTTONS
BITBOOL fAutoHide : 1; // Auto hide toolbar in theater mode
    BITBOOL fStatusBar : 1; // Status bar in theater mode
BITBOOL fSaveInShellIntegrationMode : 1; 
// Did we save in shell integration mode?
UINT uiVisible; // "Visible bands"
UINT cyRebar;
BANDSAVE bsCBANDSMAX;
CLSID aclsidExternalBands[ MAXEXTERNALBANDS ]; // Check classid
CLSID clsidVerticalBar; //clsid of bar persisted within vertical band
CLSID clsidHorizontalBar;
} COOLBARSAVE, *LPCOOLBARSAVE;




이렇다. 소스 코드를 분석해 본 결과 상당히 복잡한 방법으로 bs 멤버와 aclsidExternalBands에 저장되는 순서가 어떤 함수로 관계지어지고 uiVisible에 교묘한 방법으로 계산한 bit를 OR시켜야 한다. 등등 상당히 복잡한 방법으로 저장이 되고 있다는 점이다. 내가 수십시간에 걸쳐 분석하고 완성한 소스가 있지만 그것조차 100% 완벽하다고 장담하지 못하겠다. 솔직히 MS얘네들 간단한 내용을 왜 이렇게 복잡하게 만들었는지 모르겠다. 그냥 최대 15개의 툴바를 지원하므로 15개의 툴바에 구조체를 할당하고 보임 안보임 BOOL 변수와, 스타일 변수, 위치변수 3개만 있으면 다 될것 같은데, 뭐가 그리 복잡하게 만드어 놨는지. 간단하고 읽기좋고 단순한 알고리즘으로 충분히 리팩토링이 필요한 소스가 아닌가 하는 개인적인 불만이 있다.

7 가장 확실한 방법 



#include <mshtml.h>
void CDeletmeDlg::OnButton1()
{
 CoInitialize(NULL);
 IWebBrowser2 *pIE;
 HRESULT hr =  CoCreateInstance(CLSID_InternetExplorer, NULL,
  CLSCTX_LOCAL_SERVER,
  IID_IWebBrowser2,(void**)&pIE);
 pIE->put_Visible(VARIANT_TRUE);
 VARIANT vtBandGUID;
 VARIANT vtShow;
 VARIANT vtRet;
 vtBandGUID.vt = VT_BSTR;
 vtBandGUID.bstrVal = ::SysAllocString( L"{5258771B-ACBE-4974-8ABC-AE4969A2A5CD}" );
 vtShow.vt = VT_BOOL; 
 vtShow.boolVal = VARIANT_TRUE; //** 주의 true가 아니라 VARIANT_TRUE이다.
 vtRet.vt = VT_INT;
 vtRet.intVal = 1;
 //**주의 vtRet는 리턴값이므로 반드시 읽어야 한다.
 //NULL을 넣으면 제대로 동작하지 않는다..
 hr = pIE->ShowBrowserBar(&vtBandGUID, &vtShow, &vtRet); 
 SysFreeString(vtBandGUID.bstrVal);
 //주소바가 보이도록 설정되 있으면
 VARIANT_BOOL b;
 pIE->get_AddressBar(&b);
 if(b == VARIANT_TRUE)
 {    
  HWND hWnd=0;
  pIE->get_HWND((long*)&hWnd);
  if(::IsWindow(hWnd))
  {
   //수동으로 안 보이게한다.
   //put_AddressBar는 현재창에서는 되지만 종료하고 닫으면 주소바가 다시 보이게 되어 있다.
   //따라서 사용자가 메뉴를 누른것처럼 동작하도록 한 다면 리바의 위치정보를 즉시 다시 기록하게 된다.
   ::PostMessage(hWnd, WM_COMMAND, 41477, 0);
  }
 }
 pIE->Release();
}



내가 미처 몰랐는데 이 방식이 있다. 주의라고 표시되지 않은 부분에서 내가 실수를 해서 안 되었던 것이고, 이제 하니 잘 된다. 툴바를 새 줄로 놓는다면 그건 DLL에서 GetHostInfo인가 하는 함수에서 _BREAK을 제거하면 된다.




Posted by SB패밀리

국내 브라우저별 점유율 : 아직 IE가 85% 이상의 점유율을 보여주고 있다.

Source: StatCounter Global Stats - Browser Market Share



Source: StatCounter Global Stats - Browser Version Market Share



Source: StatCounter Global Stats - Browser Market Share



Source: StatCounter Global Stats - Browser Version Market Share


2010년12월과 2012년12월




Posted by SB패밀리

[개발/IE] 인터넷 익스플로러 새 탭 페이지 설정하는 방법

새 탭 페이지에서 사용되는 값

0= 빈페이지 . 
1=사용자의 첫 홈페이지. 
2=새 탭페이지  (about:Tabs 작동)

[IE8, IE9]
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TabbedBrowsing
NewTabPageShow=2 

* IE9에서 동적으로 변경됨

[IE7] 기본 적으로 탭 설정 정보가 없음. 만들어서 값을 넣어야 함
 
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TabbedBrowsing
ShowTabsWelcome=2 값으로 설정해야함

Posted by SB패밀리

IE TabbbedBrowsing (탭 검색설정 옵션)


  • HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TabbedBrowsing
  • HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\TabbedBrowsing

The Group Policies that are available can be set in the following locations:

  • Computer Configuration / Administrative Templates / Windows Components / Internet Explorer
  • User Configuration / Administrative Templates / Windows Components / Internet Explorer

SettingDescriptionRegistry ValueGPO Value
Enable Tabbed BrowsingEnable Tabbed BrowsingEnabled (DWORD)
0 = Off
1 = On
Turn off Tabbed Browsing
Warn Me when closing Multiple TabsWarn the user when closing IE that all the tabs will be closed as wellWarnOnClose (DWORD)
0 = Do Not Warn
1 = Warn
 
Always Switch to new tabs when they are createdDefine whether a new tab becomes active on creationOpenInForeground (DWORD)
0 = Disabled
1 = Enabled
 
Enable Quick TabsDefine whether the Quick Tab feature is availableQuickTabsThreshold (DWORD)
0 = Disabled
2 = Enabled
Turn off Quick Tabs Functionality
Open only the first home page when IE startsIf you have multiple home pages defined that each open on a new tab, only the first one will open if this is setOpenAllHomePages (DWORD)
0 = Only the first page opens
1 = All pages open
 
Open new tabs next to the current tabDefine where the new tabs are created in relation to the active tabOpenAdjacent (DWORD)
0 = Disabled
1 = Enabled
 
Open home page for new tabs instead of a blank pageEnables the administrator to set a default page for the new tabUseHomePageForNewTab (DWORD)
0 = blank page
1 = homepage
 
When a popup is encounteredDefine how IE should handle popupsPopupsUseNewWindow (DWORD)
0 = Let IE decide
1 = Open a new Window
2 = Open a new tab
Turn off configuration of tabbed browsing pop-up behavior
Open links from other programs in:Define how IE should handle URL launches from applicationsShortcutBehavior (DWORD)
0 = A new window
1 = A new tab in the current window
2 = The current tab / window
Turn off configuration of window reuse


Posted by SB패밀리
[작업] Internet Explorer 주소창 검색 기술 개발

얼마전 인터넷 익스플로러어 주소검색창에서 키워드를 입력하면 검색엔진을 이용하여 사용자에게 유익한 검색결과를 보여주는 프로그램을 제작했다.

여기서, 단지 주소창 검색은 쉬워보였었다. 연초에 만들어 보았더니 쉽게 되어서 별거 아니구나 했었는데 이번에 개발하는데 무지어려웠다.

이미 공개된 소스들로는 로직만 사용될 정도였다. 제대로 구현되지 않아서는 세상에 공개할 수 없는 작품이었다.

윈도우즈 7이 나오면서 무지 어려워진것이다.
그리고 IE 버전별로 이렇게 동작과 구성이 다를줄 몰랐다. 결국 win xp와 win 7기반에서 IE버전별로 모조리 분석을 했다.

여러차례의 시행착오를 거쳤다. 그리고 결국 만들어 냈다. 그런데, win 7 ultimate 버전이 말썽이었다. BHO로 동작하면서 win 7의 UAC에 막혀서 고전을 했다.

하지만 이것도 결국 이겨냈다.
그래서 IE 6~9 모든 버전과 win xp, win 7 모두에서 주소창 검색이 동작하는 주소창 검색 솔루션을 만들었다.

추석연휴까지 반납했었는데...
된다고 믿었고 나 하나가 아닌 함께하는 사람들을 떠올리면서 이루어낸 것이라 생각했다.

추석에 못 찾아뵌 가족들은 이후 찾아뵈었다.
이 성과물이 나와 함께하는 분들에게 좋은 결과를 가져다 줄 것이라 믿는다.

많이 도와준 분들도 약간 도와준 분들도 나에게 모두 고마운 분들이다. 고마운 마음으로 계속해 나갈 것이다.
Posted by SB패밀리
[개발/MFC] IE에서 새 탭 열기

internet explorer 에서 새 창을 여는 대신에 새 탭으로 새 페이지를 접속해 보자.

if (m_spWebBrowser != NULL)
    {
        CComBSTR bstrURL( "c:\\temp\\blank.htm" );
        
        // Navigate to the report
        VARIANT noArg;
        noArg.vt = VT_EMPTY;
       
        VARIANT flags;
        flags.vt = VT_I4;
        flags.lVal = navOpenInNewTab;

        m_spWebBrowser->Navigate(bstrURL, &flags, &noArg, &noArg, &noArg);
    }
    else
    {
        MessageBox(NULL, _T("No Web browser pointer"), _T("Error"), 0);
    }


참고 : http://msdn.microsoft.com/ko-kr/library/Aa752134.aspx
Posted by SB패밀리


[개발/MFC] 사용자가 다녀간 웹 페이지의 히스토리 얻기

사용자가 다녀간 웹 페이지의 히스토리 얻기

ITravelLogStg 인터페이스를 이용해 해당 웹브라우저 컨트롤의 히스트리를 얻을 수 있습니다.


HRESULT hr = S_OK;
IServiceProvider* pISP = NULL;
ITravelLogStg* pTLStg = NULL;
ITravelLogEntry* pTLEntry = NULL;
IEnumTravelLogEntry* pTLEnum = NULL;
 

if (FAILED(pWB->QueryInterface(IID_IServiceProvider, (void**) &pISP))
    || pISP == NULL)
   goto Cleanup;
 

if (FAILED(pISP->QueryService(SID_STravelLogCursor, IID_ITravelLogStg, (void**) &pTLStg))
    || pTLStg == NULL)
   goto Cleanup;
 

if (SUCCEEDED(pTLStg->EnumEntries(TLEF_RELATIVE_BACK, &pTLEnum)) && pTLEnum)
{
   hr = pTLEnum->Next(1, &pTLEntry, NULL);   
 

   while (hr != S_FALSE)   
   {
      LPOLESTR szURL;       
      if (SUCCEEDED(pTLEntry->GetURL(&szURL)) && szURL)
      {
                           // 무언가 하기..
      }
      pTLEntry->Release();
      pTLEntry = NULL;
      hr = pTLEnum->Next(1, &pTLEntry, NULL);   
   }
}
 

Cleanup:
 

if (pTLStg)
   pTLStg->Release();
 

if (pTLEnum)
   pTLEnum->Release();
 


출처: 인터넷

Posted by SB패밀리

[개발/MFC] IE 새창 띄우기
인터넷 익스플로러에서 새 창 띄우는 방법을 알아보자.

 if(m_spPopUpWeb == NULL)
  m_spPopUpWeb.CoCreateInstance(CLSID_InternetExplorer);

 if(m_spPopUpWeb)
 {
  USES_CONVERSION;
  VARIANT vtEmpty;
  VariantInit(&vtEmpty);

  CComBSTR bstrURL = lpszURL;

  m_spPopUpWeb->Navigate(bstrURL, &vtEmpty, &vtEmpty, &vtEmpty, &vtEmpty);
  //m_spPopUpWeb->put_MenuBar(VARIANT_FALSE);
  //m_spPopUpWeb->put_ToolBar(VARIANT_FALSE);
  //m_spPopUpWeb->put_AddressBar(VARIANT_FALSE);
  //m_spPopUpWeb->put_StatusBar(VARIANT_FALSE);
  //m_spPopUpWeb->put_Resizable(VARIANT_FALSE);
  //m_spPopUpWeb->put_Width(nWidth);
  //m_spPopUpWeb->put_Height(nHeight);
  m_spPopUpWeb->put_Visible(VARIANT_TRUE);
  //m_spPopUpWeb.Release();

 }

Posted by SB패밀리


[IT/개발] 익스플로어 주소창에 검색 기능 넣기

...\Internet Explorer\SearchUrl

주소 별명으로 주소창에 검색기능 넣기

주소 별명이란, 길다란 주소 대신 자신이 정한 애칭을 입력하게 되면 해당 주소로 이동시켜 주는 기능입니다. 그리고 이를 좀 더 응용하면 주소 별명 기능으로 주소창에서 검색또한 가능 합니다.


첨부된 레지스트리를 적용한 후 아래와 같은 값으로 인터넷 익스플로러 주소 필드에 입력하면 된다.

구글(http://www.google.co.kr)  : 주소 필드에 "g 검색어"를 넣어 검색하며 구글 검색 결과를 보여준다
네이버(http://naver.com) : 주소 필드에 "n 검색어"를 넣어 검색하며 네이버 검색 결과를 보여준다
야후(http://kr.yahoo.com) : 주소 필드에 "y 검색어"를 넣어 검색하며 야후 검색 결과를 보여준다
마이크로소프트 지식기반 : 주소 필드에 "kb 검색번호"를 넣어 검색하며 MS KB 검색 결과를 보여준다.

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchUrl\g]
@="http://www.google.co.kr/search?q=%s&ie=EUC-KR&oe=EUC-KR&hl=ko&lr= "

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchUrl\n]
@="http://search.naver.com/search.naver?where=nexearch&query=%s&hw=1"

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchUrl\y]
@="http://kr.search.yahoo.com/search?fr=kr-front&KEY=&p=%s"

Posted by SB패밀리

인터넷 익스플로러 열어본 페이지 목록 확인할 수 있는 곳

정확히 말하면 URL 입력해서 접속해 본 사이트

레지스트리

HKEY_CURRENT_USER -> Software -> Microsoft -> Internet Explorer -> TypedURLs ->
Posted by SB패밀리
쌈꼬쪼려 소백촌닭

출처 : http://support.microsoft.com/kb/324419/ko

 아래 내용은 더 이상 마이크로소프트사에서 지원하지 않는 내용으로 언제 제거가 될지 몰라 복사하여 나름대로 정리하였습니다.

 기술 자료: 324419 - 마지막 검토: 2003년 5월 12일 월요일 - 수정: 2.0
BUG: 사용자가 BeforeNavigate에서 다시 탐색할 때 스크롤 막대 및 테두리의 프레임셋 나타난다


스크롤 막대 제거
테두리 제거

 

[현상]

 

다음 조건에 해당하는 경우 빈 스크롤 막대 및 경우에 따라 테두리가 나타납니다. 프레임셋을 WebBrowser 컨트롤을 호스팅하는 응용 프로그램...다음 조건에 해당하는 경우 빈 스크롤 막대 및 경우에 따라 테두리가 나타납니다.

- 프레임셋을 WebBrowser 컨트롤을 호스팅하는 응용 프로그램을 표시합니다. - 및 -

- BeforeNavigate 또는 BeforeNavigate2 이벤트 처리기 내의 다른 곳에서 프레임셋의 프레임에 이동합니다.

이러한 항목은 프레임에서 나타나지 않아야 합니다.


[해결 방법]

스크롤 막대 사용하여 문제를 해결하려면 다음 방법 중 하나를 사용하십시오.

- 프레임 페이지의 HTML 원본을 수동으로 "자동" 또는 "아니요" 값...스크롤 막대 사용하여 문제를 해결하려면 다음 방법 중 하나를 사용하십시오.
프레임 페이지의 HTML 원본을 수동으로 "자동" 또는 "아니요" 값을 <body>태그 스크롤 특성을 추가하십시오.
- 스크롤 특성을 동적으로 통해 동적 HTML(DHTML) 추가하십시오.
- 사용자 정의 메시지 게시 및 사용자 정의 메시지 처리기 탐색을 수행하는 탐색을 지연하십시오.

테두리가 문제를 해결하려면 다음 방법 중 하나를 사용하십시오.

- 사용자 정의 메시지, 게시 후 탐색 사용자 정의 메시지 처리기에서 수행하십시오.
- IDocHostUIHandler 인터페이스를 구현하고 DOCHOSTUIFLAG_NO3DBORDER GetHostInfo 메서드를 반환하십시오
.

자세한 내용은 이 문서의 "추가 정보" 절을 참조하십시오.


[현재 상태]

Microsoft는 이 문서의 시작 부분에 나열한 제품에서 문제를 확인했습니다.Microsoft는 이 문서의 시작 부분에 나열한 제품에서 문제를 확인했습니다.


[추가 정보]

Windows Mobile 기반 스마트폰에 GPRS 연결이 구성되어 있는지 확인합니다참고: 이 단계는 Microsoft Visual C++ 6....Windows Mobile 기반 스마트폰에 GPRS 연결이 구성되어 있는지 확인합니다
참고: 이 단계는 Microsoft Visual C++ 6.0 기록됩니다.

 

1. 프레임셋 페이지의 만들려면 다음 코드를 사용하고 페이지 frameset.htm 이름:
------------------------------------------------------------------------------------------
<HTML>
 <FRAMESET rows="100%" cols="33%,33%,34%">
  <FRAME src="http://aplus.pe.kr/zbxe/framesetChild.htm" frameborder="0" scrolling="0">
  </FRAME>
  <FRAME src="http://aplus.pe.kr/zbxe/framesetChild.htm" frameborder="0" scrolling="0">
  </FRAME>
  <FRAME src="http://aplus.pe.kr/zbxe/framesetChild.htm" frameborder="0" scrolling="0">
  </FRAME>
 </FRAMESET>
</HTML>

------------------------------------------------------------------------------------------     

2. frameset.htm 웹 서버에 복사하십시오.
3. 다음 코드를 사용하여 프레임 페이지 만들기 및 페이지 framesetChild.htm 이름:
------------------------------------------------------------------------------------------
<HTML>
 <body>
  This is a frame<br>
 </body>
</HTML>
------------------------------------------------------------------------------------------

4. framesetChild.htm 웹 서버에 복사하십시오.
5. 기본 Microsoft Foundation 클래스 (MFC) 대화 상자 기반 응용 프로그램을 만듭니다.
6. 대화 상자를 마우스 오른쪽 단추로 클릭한 다음 ActiveX 컨트롤 삽입 을 클릭하십시오. Microsoft 웹 브라우저 컨트롤 을 클릭하십시오.
7. WebBrowser 컨트롤의 컨트롤의 데이터 구성원을 추가하려면 다음과 같이 하십시오.

 a. 클래스 마법사를 열고 멤버 변수 탭을 클릭하십시오.
 b. 대화 상자 클래스에 클래스 이름 목록에서 선택되어 있는지 확인하십시오.
 c. WebBrowser 컨트롤의 기본 ID가 되는 IDC_EXPLORER1 를 클릭한 다음 변수 추가 클릭하십시오.
 d. 컨트롤 프로젝트에 삽입되지 않는 것을 알리는 메시지가 나타납니다. 컨트롤을 프로젝트에 추가하고 확인 클릭하십시오. CWebBrowser2 클래스의 클래스 확인 대화 상자에서 기본값을 다시 확인 을 클릭하십시오.
 e. 사용자의 멤버 변수 m_webBrowser, 이름을 지정한 다음 확인 을 누릅니다.
 f. 클래스 마법사를 닫습니다.

8. BeforeNavigate2 이벤트 처리기를 추가하려면 다음과 같이 하십시오.

 a. 클래스 마법사를 열고 메시지 맵 탭을 클릭하십시오.
 b. 대화 상자 클래스에 클래스 이름 목록에서 선택되어 있는지 확인하십시오.
 c. IDC_EXPLORER1개체 ID 목록에서 클릭한 다음 메시지 목록에서 BeforeNavigate2 를 클릭하십시오.
 d. 처리기를 추가하려면 함수 추가 클릭하십시오.
 
9. 다음 코드를 추가하여:
------------------------------------------------------------------------------------------
void CMFCReproDlg::OnBeforeNavigate2Explorer1(LPDISPATCH pDisp, VARIANT FAR* URL, VARIANT FAR* Flags, VARIANT FAR* TargetFrameName, VARIANT FAR* PostData, VARIANT FAR* Headers, BOOL FAR* Cancel)
{
 static int nCount = 0;

 nCount++;
 if (nCount == 2) // this should be the navigate for the first frame in frameset
 {
  IWebBrowser* pWB = NULL;
  HRESULT hr = pDisp->QueryInterface(IID_IWebBrowser, (void**)&pWB);
  COleVariant ve((long)0);
  pWB->Navigate(::SysAllocString(L"
http://myserver/mydirectory/framesetChild.htm"), &ve, &ve, &ve, &ve);
  *Cancel = VARIANT_TRUE;
 }
}
     
------------------------------------------------------------------------------------------

10. OnInitDialog 함수의 끝에 있는 프레임 페이지를 탐색하려면 다음 코드를 추가합니다.
------------------------------------------------------------------------------------------
BOOL CMFCReproDlg::OnInitDialog()
{
 ...
 m_webBrowser.Navigate("
http://myserver/mydirectory/frameset.htm", NULL, NULL, NULL, NULL);
  
   
------------------------------------------------------------------------------------------

11. 응용 프로그램을 빌드하고 이를 실행하십시오. 첫 번째 프레임 스크롤 막대 및 테두리를 오른쪽에 연관되어 있습니다.

 

스크롤 막대 제거

스크롤 막대를 제거하려면 다음 방법 중 하나를 사용하십시오.

- 스크롤 특성 값이 "자동" 또는 "아니요" framesetChild.htm 페이지에 다음과 같은 추가:
------------------------------------------------------------------------------------------
<HTML>
 <body scroll="auto">
  This is a frame<br>
 </body>
</HTML>
------------------------------------------------------------------------------------------

- 동적으로 스크롤 특성 값이 "자동" 또는 "아니요" DHTML 통해 코드에서 다음과 같은 추가:

------------------------------------------------------------------------------------------
#include <mshtml.h>
// For brevity, this code adds the attribute to all documents.
void CMFCReproDlg::OnDocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT FAR* URL)
{
 HRESULT hr = S_OK;
 IWebBrowser2* pWB = NULL;

 hr = pDisp->QueryInterface(IID_IWebBrowser2, reinterpret_cast<void**>(&pWB));
 
 IDispatch* pDocDisp = NULL;
 hr = pWB->get_Document(&pDocDisp);
 
 if (pDocDisp)
 {
  VARIANT v;
  VariantInit(&v);

  IHTMLDocument2* pDoc = NULL;
  hr = pDocDisp->QueryInterface(IID_IHTMLDocument2, reinterpret_cast<void **>(&pDoc));

  IHTMLElement* pElement = NULL;
  hr = pDoc->get_body(&pElement);

  IHTMLBodyElement* pBodyElement = NULL;
  hr = pElement->QueryInterface(IID_IHTMLBodyElement, (void**)&pBodyElement);

  if (pBodyElement)
  {
   pBodyElement->put_scroll(::SysAllocString(L"auto"));  // "no"
   pBodyElement->Release();
  }
  pElement->Release();
  pDoc->Release();
  pDocDisp->Release();
 }
 pWB->Release();
}

------------------------------------------------------------------------------------------ 

참고: 이 처음 두 옵션 경우에만 스크롤 막대를 제거합니다. 테두리 여전히 지속될 수 있습니다.

- 사용자 정의 메시지, 게시 후 탐색 탐색 지연시킬 수 있는 사용자 정의 메시지 처리기가 수행하십시오.


헤더 파일에 다음 코드를 추가하여:
------------------------------------------------------------------------------------------
class CMFCReproDlg : public CDialog
{
...
 afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
};
      
------------------------------------------------------------------------------------------

구현 파일에 다음 코드를 추가합니다:
------------------------------------------------------------------------------------------
#define WM_MYMESSAGE (WM_USER + 1)
BEGIN_MESSAGE_MAP(CMFCReproDlg, CDialog)
 //{{AFX_MSG_MAP(CMFCReproDlg)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
 //}}AFX_MSG_MAP
 ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
END_MESSAGE_MAP()

struct CMyData
{
 IWebBrowser2* m_pWB;
 BSTR m_pUrl;
};

void CMFCReproDlg::OnBeforeNavigate2Explorer1(LPDISPATCH pDisp, VARIANT FAR* URL, VARIANT FAR* Flags, VARIANT FAR* TargetFrameName, VARIANT FAR* PostData, VARIANT FAR* Headers, BOOL FAR* Cancel)
{
 static int nCount = 0;

 nCount++;
 if (nCount == 2) // this should be the navigate for the first frame in frameset
 {
        *Cancel = VARIANT_TRUE;
        CMyData *data = new CMyData;
  HRESULT hr = pDisp->QueryInterface(IID_IWebBrowser2, (void**)(&data->m_pWB));
        data->m_pUrl = ::SysAllocString(L"
http://myserver/mydirectory/framesetChild.htm");
  PostMessage(WM_MYMESSAGE, (WPARAM)data, 0);
 }
}
LRESULT CMFCReproDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
    CMyData *data = (CMyData*)wParam;
    COleVariant ve((long)0);
    data->m_pWB->Navigate(data->m_pUrl, &ve, &ve, &ve, &ve);
    delete data;
 return 1;
}
     

------------------------------------------------------------------------------------------

 

테두리 제거


테두리를 제거하려면 다음 방법 중 하나를 사용하십시오.

 - 사용자 정의 메시지, 게시 후 탐색 사용자 정의 메시지 처리기에서 수행하십시오.

 - Microsoft 기술 자료 문서 Q196835 IDocHostUIHandler 인터페이스를 추가할 수 사용자 지정 컨트롤을 사이트를 제공할 수 있는 단계를 수행하십시오. 자세한 내용은 아래 문서 번호를 눌러 Microsoft 기술 자료에 있는 문서를 클릭하십시오.
 196835  (http://support.microsoft.com/kb/196835/EN-US/ ) HOWTO: MFC 기본 컨트롤 포함 무시

모든 함수를 구현하는 후 DOCHOSTUIFLAG_NO3DBORDER DOCHOSTUIINFO stucture GetHostInfo 메서드에 대한 dwFlags 필드에서 추가해야 합니다. IDocHostUIHandler 구현하는 단계를 제공하기 위해 이 문서에서는 다루지 않습니다.
참고: ATL 클래스 CAxHostWindow, IDocHostUIHandler 인터페이스를 구현하므로 ATL (액티브 템플릿 라이브러리) 컨테이너에서 테두리 문제가 나타나지 않습니다. 기본적으로 이 플래그는 CAxHostWindow 사용할 수 있습니다.


--------------------------------------------------------------------------------

본 문서의 정보는 다음의 제품에 적용됩니다.

Microsoft Internet Explorer 5.5

키워드:   kbmt kbbug kbpending KB324419 KbMtko

더 이상 지원되지 않는 제품의 KB 내용에 대한 고지 사항

이 문서에서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 설명합니다. 따라서 이 문서는 "있는 그대로" 제공되며 업데이트되지 않습니다.

 

 

Posted by SB패밀리
쌈꼬쪼려 소백촌닭

사용자의 인터넷익스플로러 창 모두 닫기

//네임스페이스 선언
using System.Diagnostics;

//현재 사용자 컴퓨터에 열려 있는 익스플로러의 창을 모두 닫는다.
public static void KillExplorer()
{
   Process[] procs = Process.GetProcessesByName("IEXPLORE");
   for(int i=0; i< procs.Length; i++) procs[i].Kill();
}

현재 실행중인 프로세스를 죽이는 방법으로 iexplore를 종료시킵니다.

Posted by SB패밀리

IE 검색공급자 확장성

Search Provider Extensibility in Internet Explorer

Starting with Windows Internet Explorer 7, the Instant Search box provides an AutoComplete feature so users can search for similar search terms used in previous searches. Internet Explorer 7 also enables users to add multiple search providers. Search improvements in Internet Explorer 8 focus on helping users search by significantly improving the Instant Search box drop-down menu and supporting search suggestions.
This topic addresses two audiences: end users and Web site developers. The first part of this topic focuses on helping end users install search providers, manage search providers, and use a search provider to find what they want. The second part of this topic focuses on Web site developers by showing how to promote a search provider and how to use search suggestions to improve a user's experience with your search provider.

This topic discusses the following subjects:

End User Search Features

The Instant Search feature in Internet Explorer 8 enables the end user to add favorite search providers and quickly switch between providers during a search. Internet Explorer 8 supports search suggestions to help users initiate better search queries. Search providers can also provide instant answers to queries. In addition to using the Instant Search box, users can access all of their search providers through the Accelerators menu. These features are designed to improve search experience and increase productivity for end users.
This section covers the following topics:

Adding Search Providers

The Instant Search box in the upper-right corner of the Internet Explorer 7 and Internet Explorer 8 browser window replaced the Windows Search Assistant (or Search Pane). Before you can use a specific search provider, you must add that provider to your list. To add a search provider, browse to the provider's Web site. There are two ways to install a search provider.

First, the provider Web site might display a link or button that you can click to add them as a search provider to your list. By clicking the link or button, the Add Search Provider dialog box is displayed so you can confirm your selection.
Add Search Provider dialog box
Figure 1. Add Search Provider dialog box.
If this particular search provider is already installed, you will get a dialog box saying so or you will get a dialog box with options to upgrade that provider. For example, the search provider may offer search suggestions now where it did not before.

The second way to add a search provider is by discovery. After the provider's Web page loads, the drop-down arrow on the Instant Search box turns orange, indicating that a search provider can be installed.
Orange drop-down arrow on the Instant Search box
Figure 2. Orange drop-down arrow on the Instant Search box.
When you click the orange drop-down arrow, a list of the search providers that are installed and other available options is displayed. A golden icon appears to the left of the search provider's name that Internet Explorer 8 discovered. When you click the Add Search Providers option, a list of the available providers is displayed. The following picture shows the Live Search options: Products, Images, and Videos.
Add Search Provider menu showing search providers and search options
Figure 3. Add Search Provider menu showing search providers and search options.

Note  To help you get started, there is a list of providers available from the Internet Explorer Gallery. The gallery can be accessed at any time by choosing Find More Providers... from the drop-down arrow on the Instant Search box; as shown in Figure 3.

Adding Your Own Search Provider

If your search provider does not provide a direct way for you to add it as a search provider, you can still add it manually. Follow the instructions on the Windows Search Guide page to create your own search provider. Note that this widget adds the provider only as a search provider without search suggestions. If you know that the provider offers search suggestions, use the search provider's Web site to add the provider.

Managing Search Providers

The maximum number of search providers you can install is 200, which might be challenging to manage.To manage your search providers in Internet Explorer 8, click the drop-down arrow on the Instant Search box, and then click Manage Search Providers. You can reorder providers, change the Default status, and remove a provider, as shown in the following image.
Manage Internet Explorer Add-ons dialog box
Figure 4. Manage Internet Explorer Add-ons dialog box.
To change a search provider's attributes, click the provider name, make your changes, and click Close.

Note  You cannot remove the current Default provider. To remove the default provider, you must set another provider to Default status. To do that, open the Manage Search Providers dialog box, click another provider, click the Set as default button. Then, click the provider you want to remove and click Remove.

Searching With My Favorite Search Providers

To perform a search, type the search term in the Instant Search box. While you might be familiar with this box in Internet Explorer 7, you will notice significant improvements in how you can search in Internet Explorer 8.
After you click in the Instant Search box, a QuickPick menu is displayed. The QuickPick menu shows as many search providers' icons as the width of Instant Search box would allowed, making it easy to switch between providers. To see more search providers in the QuickPick, resize the Instant Search box. You can use the same term to search across these providers without having to navigate to each provider's Web site.
QuickPick menu
Figure 5. The QuickPick menu.
After entering your search term, press ENTER to use the current search provider, or select a provider from the QuickPick menu to perform the search. If the search provider you use supports search suggestions, then search suggestions appear as you type. For example, if you search for "Xbox" by using Live Search, you might see the following list of suggestions.
Live Search Suggestions drop-down menu
Figure 6. Live Search Suggestions drop-down menu.
The top part of the suggestion menu is the AutoComplete section that shows recent searches that match your current search term. The second part of the suggestion menu is the Suggestions section that lists search suggestions provided by the current search provider. The third part of the suggestion menu is the History section that lists previously visited sites showing Web site titles and URLs that match the current search term. Matching terms are highlighted. You can select a matching term to search. The QuickPick menu is displayed at the bottom of the menu for quick access to your top search providers.
Internet Explorer 8 enables search providers to display visual suggestions. Search providers can supply a small image and text, as shiown in the following figure, or just an image which can be mixed in with regular text suggestions.
Visual and text suggestions for the term Xbox
Figure 7. Xbox visual and text search suggestions
In addition, a search provider can offer instant answers to your search term. With instant answers, your provider can take you directly to the information you are looking for rather than to a search results page. This can make your search more efficient.

Search Using Accelerators

New to Internet Explorer 8 is the concept of Accelerators. Accelerators enable you to access service providers anywhere on the page. Every time you add a search provider to your list, Internet Explorer 8 automatically converts it to an Accelerator. To use this feature, highlight the text you want to search for and click the Accelerators icon Accelerators icon that appears. A condensed list of the Web services you have installed is displayed. Among them is your default search provider. To use a different search provider, click More Accelerators. The following picture shows the expanded More Accelerators menu.
More Accelerators menu showing available Web services
Figure 8. The More Accelerators menu showing available Web services.

Another benefit of an Accelerator is the ability to Preview search results. If your search provider supports search preview, you can simply select some text on a Web page, click the Accelerator's icon, mouse over your search provider's name (you may need to open the More Accelerators list to find it), and a preview window appears with search results for the words you selected. This makes it even faster and more convenient to search using your installed search providers. To learn more about Accelerators, see the article OpenService Accelerators Developer Guide.

Find on Page

The Find on Page feature is another improvement to the user experience in Internet Explorer 8. To start a search, click the Find option at the right of the QuickPick menu or use the shortcut key CTRL+F. The Find on Page feature searches the current page using the terms in the Instant Search box. As the following screen shot illustrates, all matches on the page are highlighted, and the first matching term is selected. The number of matches on the page is also displayed.
Find on Page feature

Tips and Tricks

Here are some other features and hints not covered above.

  • Search history can be deleted. You can delete previous search terms and history pages from the History list. This is useful when you do not want terms you misspelled to appear in the AutoComplete section. As you type in the Address bar or the Instant Search box, search suggestions are displayed along with AutoComplete and History suggestions. Mouse over the item you want to delete from the AutoComplete or History list, and an X appears next to the item, as shown in the following picture. Click the X to delete the item from the list.
    Deleting an item from the History list

  • You can initiate a search from the Address bar. When using the Address bar, your current search provider will be used to offer search suggestions; however, the search will be performed by your Default search provider. To initiate a search from the Address bar, start the search with a ? followed by your search term. For example, to do a search for xbox, type ? xbox. If your current search provider offer search suggestions for xbox you will see them listed. Selecting a term or pressing ENTER will perform the search using your Default search provider.
  • The Instant Search box can be resized. To resize the Instant Search box, move the pointer to the left edge of the Instant Search box. When the horizontal pointer appears, drag to resize the Instant Search box.

 

Web Developer Search Features

Sites can now advertise search providers so that users can perform searches directly from the Internet Explorer chrome without first having to navigate to a particular site. The default search provider is also used to perform searches from the Address bar. The first step in promoting your search provider in Internet Explorer 8 is to enable users to install your Web site as a search provider in the search box. To do this, there are two steps you need to take. The first step is to create an OpenSearch Description World Wide Web link file for your search provider and the second step is to expose the description file on your Web site so that users can install it.

This section focuses on helping developers understand and take advantage of Internet Explorer 8 search features to improve user search experience. This section covers the following topics:

Creating an OpenSearch Description File

Before promoting your services and provide users with options to install your search provider, you must create an OpenSearch Description World Wide Web link file. OpenSearch Description files are small XML files that describe your search provider to Internet Explorer 8. The following table describes the values in the OpenSearch Description file.

Value Description
ShortName (required) This is the search provider's name that is displayed in the Instant Search box when your provider is selected.
URL (required) The URL for basic search queries to your search provider. It has to be an absolute URL.
Image (optional) Pointer to a favicon file of your search provider on your Web site. This icon is displayed next to the provider name in the Instant Search box. The icon must be a valid shortcut icon file otherwise a generic icon will be used. For more information, see the "Creating Icons in the Correct Format" section of the Add a Shortcut Icon to a Web Page article for instruction on how to create a favicon.
Suggestions URL (JSON) (optional) This is the URL where JavaScript Object Notation (JSON) suggestions can be retrieved.
Suggestions URL (XML) (optional) This is the URL where XML-based suggestions can be retrieved.
PreviewUrl (optional) URL to display results in an Accelerator Preview Window.

The following sample OpenSearch Description file defines the type of search services you intent to offer.

<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:ie="http://schemas.microsoft.com/Search/2008/">
	<ShortName>My Custom Search</ShortName>
	<Image height="16" width="16" type="image/icon">http://example.com/example.ico</Image>
	<Url type="text/html" template="http://example.com/search.aspx?q={searchTerms}&amp;source=IE"/>   
	<Url type="application/x-suggestions+json" template="http://suggestions.example.com/search.aspx?q={searchTerms}"/>
	<Url type="application/x-suggestions+xml" template="http://suggestions.example.com/search.aspx?q={searchTerms}"/>
	<ie:PreviewUrl type="text/html" template="http://suggestions.example.com/search.aspx?q={searchTerms}"/>
</OpenSearchDescription>

All OpenSearch Description files must include the search provider name and search URL. Without these elements, Internet Explorer 8 cannot install your search provider. All search URLs must contain "{searchTerms}" somewhere in the query string. When Internet Explorer 8 navigates to this provider to get search results, "{searchTerms}" is replaced by the query string that the user typed into the Instant Search box. you should include an icon within the OpenSearch Description file. If Internet Explorer 8 cannot find an icon specified by the "Image" attribute it will use a generic icon Generic search provider icon to represent your search provider in the QuickPick menu.

A quick way to generate an OpenSearch Description file is to use a widget from the Windows Search Guide to Create Your Own XML file. Follow the instructions in the widget, and then click the View XML link from step 5. The widget creates XML syntax similar to the preceding code snippet. Save the output to an XML file, and then upload the file to your Web server. Make sure you have a valid XML file, and that the "&" characters in your URL are encoded.

Note  The widget only produces a basic XML file that you can use and customize. However, it does not generate any icon or suggestion URL. You would have to add those yourself.

Adding Search Suggestions to OpenSearch Description Files

In Internet Explorer 8, search providers can offer suggestions to users. By using search suggestions, users can create better search terms and find what they are looking for faster. To offer search suggestions for JSON and XML format, add the following elements to your description file.

<Url type="application/x-suggestions+json" template="http://suggestions.example.com/search.aspx?q={searchTerms}"/>
<Url type="application/x-suggestions+xml" template="http://suggestions.example.com/search.aspx?q={searchTerms}"/>

When you add additional URL elements, make sure the "text/html" type is listed first. This is for backward compatibility. The other types can follow in any order. By default, Internet Explorer uses the URL of "text/html" as the generic search URL when search suggestions are not available or not supported by earlier versions. However, when both URL for the XML and JSON exists, Internet Explorer 8 will use the XML suggestions URL.

Note  If users had added your search provider before it supported suggestions, they must add your search provider again. Internet Explorer 8 will detect that your search provider had already been installed but is now offering suggestions. The Add Search Provider dialog box will display an Upgrade Provider button and enable the checkbox for search suggestion.

Supporting Search Previews

All installed search providers are automatically converted to Accelerators. Because Accelerators support previews, this allows you to support search previews as well by adding a PreviewUrl to your OpenSearch Description file as shown here.

<ie:PreviewUrl type="text/html" template="http://suggestions.example.com/search.aspx?q={searchTerms}/>

With this element added to your OpenSearch Description file, you can offer a lightweight view of the search results page. The preview shows up in a 320 x 240 window when the user selects some text on a Web page, clicks the Accelerators icon, and mouses over your search provider name. For more information about Accelerators and the Preview feature, see the article on OpenService Accelerators Developer Guide.

Note  The ie:PreviewUrl is using the namespace provided by Internet Explorer's namespace declarations. When using this feature, make sure this declaration is defined in your OpenSearchDescription tag: xmlns:ie="http://schemas.microsoft.com/Search/2008/".

Promoting Search Providers

After you create your OpenSearch Description file, you can promote your services to users. There are two primary ways to promote search providers. The first option is to provide your users with a link or button that points to your description file. The users will need to take action to install your provider. The second option is to make your provider discoverable. It requires one line of code at the top of your Web page and allows Internet Explorer 8 to discover your provider as users browse your site.

The following code adds a search provider when a user clicks a link.

<a href="#"
   onclick="window.external.AddSearchProvider('http://www.example.com/provider.xml')"
   >Add Search Provider Example</a>

The code makes a call to the AddSearchProvider method. The AddSearchProvider method is available from the external object of window. When you run this code from an HTML page in Internet Explorer 8, the Add Search Provider dialog box is displayed.

Making Search Provider Discoverable

The second way to promote a search provider is to make the search provider discoverable. The OpenSearch specification describes how to advertise search providers by adding a link element to the head of the Web page. The following code enables Internet Explorer 8 to discover your search provider.

<link title="My Provider" rel="search"
   type="application/opensearchdescription+xml"
   href="http://www.example.com/provider.xml">

The rel attribute must be "search," and type must be "application/opensearchdescription+xml." The value of title is displayed in the Instant Search box drop-down menu. The href attribute contains an absolute or relative URL that specifies the location of the OpenSearch Description file.

When the page is loaded in Internet Explorer 8, the drop-down arrow on the Instant Search box turns orange to indicate that new search providers have been added to the drop-down menu. The three newest discoverable search providers are listed; these must be installed before additional providers can be included in the list. When the user browses to another domain, the previously discovered search providers are removed. Users can try out the new providers before adding them to their list. When a user decides to install a search provider, the Add Search Provider dialog box is displayed.

Offering Search Suggestions

Starting with Internet Explorer 8, the Instant Search box supports search suggestions. With search suggestions, as the user is typing in the search box, Internet Explorer 8 can send requests to your search provider with the current query string and you can supply suggestions which might enable the user to create a better search term. Internet Explorer 8 supports two search suggestions formats: JSON format and XML format. The JSON format enables text-based search suggestions that can be augmented with descriptions and URL. The XML format enables all the content available with JSON suggestions, and further support visual suggestions and section titles. More details on XML search suggestions format can be found from this article: XML Search Suggestions Format Specification.

Note  This section covers the formatting of individual suggestion responses only. To fully support search suggestions, you must generate these suggestions and provide the right suggestions at each request. Since this part of supported suggestions is unique to each provider, it is not addressed here.

Using JSON Suggestions Format

JSON search suggestions are returned as a Microsoft JScript array of arrays. The array contains four values:

Value Description
Query string (required) The search term that was requested. If the browser requested suggestions for "xbox," then the query string is "xbox". Returning the query string in the array ensures that the returned suggestions are for the requested search term.
Completions array (required) The suggestions for the given query string.
Descriptions array (optional) Alternate strings that provide additional information or context about a given completion.
Query URLs array (optional) A list of URLs that should be used if the user selects a given suggestion. This acts as an instant answer to the search term by taking the user to the URL rather than a search results page.

A JSON response must return the query string and the search suggestions in the completions array. The following is an example of a simple JSON response where the descriptions and query URLs are omitted.

["xbox",
	["Xbox 360", "Xbox cheats", "Xbox 360 games"]]
Note  A maximum of ten search suggestions are displayed at a time. Adding descriptions, visuals, and sections limits the number of suggestions that can be provided. It is important to send the most relevant suggestions at the beginning of the completions array.

To help users create better search terms, descriptions can be offered along with the suggestions. A query URLs might be offered as a form of an instant answer. When a query URL is offered, and the user clicks on that suggestion, Internet Explorer 8 takes the user to that query URL directly rather than to a search results page. The following is an example of a detailed JSON response.

["xbox",
	["Xbox 360", "Xbox cheats", "Xbox 360 games"], 
	["The official Xbox website from Microsoft", "Codes and walkthroughs", "Games and accessories"],	
	["http://www.xbox.com","http://www.example.com/xboxcheatcodes.aspx", "http://www.example.com/games"]]

In this JSON response, the first search suggestion consists of the following elements:

  • First element in the first array ("Xbox 360")
  • First element in the second array ("The official Xbox website from Microsoft")
  • First element in the third array ("http://www.xbox.com").

The preceding response produces the following results:
JSON search suggestions

Using XML Suggestions Format

The preceding JSON response can be represented in XML suggestions format, as shown in the following example. This example contains the same suggestions response as in the preceding JSON suggestions and produces the exact same result.

<?xml version="1.0"?>
<SearchSuggestion xmlns="http://schemas.microsoft.com/Search/2008/suggestions">
    <Query>xbox</Query>
    <Section>
	<Item>
		<Text>Xbox 360</Text>
		<Description>The official Xbox website from Microsoft</Description>
		<Url>http://www.xbox.com</Url>
	</Item>
	<Item>
		<Text>Xbox cheats</Text>
		<Description>Codes and walkthroughs</Description>
		<Url>http://www.example.com/xboxcheatcodes.aspx</Url>
	</Item>
	<Item>
		<Text>Xbox 360 games</Text>
		<Description>Games and accessories</Description>
		<Url>http://www.example.com/games</Url>
	</Item>
    </Section>
</SearchSuggestion>

The JSON suggestion format does not allow section titles to be specified in the suggestion menu. In Internet Explorer 8, the section title will be the name of your search provider plus the word "Suggestions." For example, if your search provider is named "Joe's Search," then your suggestions would be titled "Joe's Search Suggestions." In the following example, the search provider is named "My Custom Search" and the title is displayed as "My Custom Search Suggestions." If you want to organize your suggestions in multiple sections, use the XML suggestions format. In addition to section titles, the XML suggestions format supports visual suggestions. More details on XML search suggestions format can be found from this article: XML Search Suggestions Format Specification.

XML search suggestions support the same features as JSON search suggestions, and additional features that are not available in JSON. These additional features include the following:

  • Customizing the title of the suggestions section.
  • Splitting suggestions across multiple section separators.
  • Including visual suggestions.

To customize section titles, you can add a "title" attribute to the Section element, or you can add a Separator. Separators may or may not have a title. The following example adds a separator for "My Text Suggestions" and another separator without a title.

<?xml version="1.0"?>
<SearchSuggestion xmlns="http://schemas.microsoft.com/Search/2008/suggestions">
    <Query>xbox</Query>
    <Section>
	<Separator title="My Text Suggestions"/>
	<Item>
		<Text>Xbox 360</Text>
		<Description>The official Xbox website from Microsoft</Description>
 		<Url>http://www.xbox.com</Url>
	</Item>
	<Item>
		<Text>Xbox cheats</Text>
		<Description>Codes and walkthroughs</Description>
		<Url>http://www.example.com/xboxcheatcodes.aspx</Url>
	</Item>
	<Item>
		<Text>Xbox 360 games</Text>
		<Description>Games and accessories</Description>
		<Url>http://www.example.com/games</Url>
	</Item>
	<Separator />
	<Item>
		<Text>xbox 360 lowest price</Text>
	</Item>
	<Item>
		<Text>xbox 360 news</Text>
	</Item>
    </Section>
</SearchSuggestion>

The code above produces the following result.
XML search suggestions with custom title and section separators

Offering Visual Suggestions

Search suggestions generally consist of text suggestions or related terms that users might want to search for. In Internet Explorer 8, the concept of a search suggestion has been expanded to include a query string, a link, or a visual suggestion. A visual suggestion includes an image. Your search provider can supply an image with text or just an image as a search suggestion for the user's search term. To add a visual suggestion to your response, add an Image element to the Item element of that suggestion. Be sure to also specify the image's width and height dimentions. For example, to offer a visual suggestion for the term "Xbox," you might return the following:

 <Separator title="My Visual Suggestions" />
  <Item>
  	<Text>Xbox 360 Game Consoles</Text>
  	<Description>Game console systems and packages at a great deal.</Description>
  	<Image source="http://www.example.com/xboxconsole.jpg" alt="Xbox 360 Consoles" width="75" height="75"/> 
  	<Url>http://www.example.com/</Url>
  </Item>
  <Item>
  	<Text>Xbox 360 Wireless Controller</Text> 
  	<Image source="http://www.example.com/xboxcontroller.jpg" alt="Xbox 360 Wireless Controller" width="75" height="75"/> 
  </Item>
  <Item>
  	<Text>Xbox 360 Live Games</Text> 
  	<Image source="http://www.example.com/live.jpg" alt="Xbox 360 Live Games" width="75" height="75"/> 
  	<Url>http://www.example.com/games.aspx?q="Xbox 360"</Url> 
  </Item>

The preceding code produces the following results.
Xbox visual suggestions

This example offers a URL with two of the suggestions. Internet Explorer 8 takes the user directly to the page specified by the URL. If URL is not offered, then the value of the Text element ("Xbox 360 Wireless Controller") is used as the search term. If you want to offer a visual suggestion with no Text or Description, you must offer a URL so Internet Explorer 8 knows where to send the user.

By default, if you include text with an image, the text is centered vertically next to the image. By setting the align attribute value to "top", "middle", or "bottom", you can specify the text alignment of the Text element and Description element relative to the image.

To align your text, add the align attribute to your image element. The example below sets the align attribute to "top".

<Image source="http://www.example.com/xboxconsole.jpg" alt="Xbox 360 Consoles" width="75" height="75" align="top"/> 
Handling Response Errors

When you offer search suggestions, chances are, there may be terms you may not have any suggestions for or you may not recognize the search term. In that case, you are still required to send back a valid XML response otherwise your users will get a message that says An error occurred. To avoid this message, send back a valid XML response when you have no suggestion for the search term. The code snippet below sends a response without any suggestion for the search term xbox. This response will show the No results. message.

<?xml version="1.0"?>
<SearchSuggestion xmlns="http://schemas.microsoft.com/Search/2008/suggestions">
    <Query>xbox</Query>
</SearchSuggestion>

For a JSON respond, return the following:

 ["xbox"] 

Besides not having any suggestion for a search term, you might have cases where you know the suggestion exist but you are still getting the error message. In that case, check the request for encoding. By default, search terms are encoded using UTF-8 though the HTTP GET request method. That means if the user type in any accented characters, the characters are encoded to an ASCII (text) equivelent. For example, if your search term is café then the term that is send to you is q=caf%c3%a9 where the accented é has been encoded to an ASCII equivelent of %c3%a9.

Note  Search providers must use the HTTP GET request method; the POST request method is not supported.

Getting Dimensions for the Search Suggestions Menu

You should include the height and width of your image when you provide a visual suggestion. If you do not include these values, Internet Explorer 8 allocates a default space for the image and scales the image to fit within that space. The default amount of space, in this case, is the vertical equivalent of one line of text.

The Instant Search box can be resized, so the dimensions of the search suggestions drop-down menu may vary. To find out the dimensions of the search suggestions menu, you can add parameters to the OpenSearch Description URL that return the size of the search suggestions drop-down menu. Available parameters include the following.

Parameter Description
{maxWidth} The width of the drop-down menu, in pixels.
{sectionHeight} The height of the entire suggestions section.
{rowHeight} The height of a single line of text, which is equivalent to one line of text.

The following example shows these parameters added to the URL of the OpenSearch Description file.

<Url type="application/x-suggestions+xml" 
	template="http://suggestions.example.com/search.aspx?q={searchTerms}&amp;
	maxwidth={maxWidth}&amp;rowheight={rowHeight}&amp;sectionHeight={sectionHeight}" 
/>

The following picture identifies the area for each parameter.
Search suggestions menu parameter

Identifying Search Referrers

Starting from Internet Explorer 7 the OpenSearch Referrer Extension World Wide Web link is supported. When the user initiates a search, Internet Explorer adds a referrer attribute to the search query that indicates whether the search was initiated by the Instant Search box or by the Address bar. If the search was initiated by the Instant Search box, the referrer attribute is set to IE-SearchBox. If the search was initiated from the Address bar, either through a favorite or direct typing, the referrer attribute is set to IE-Address.

Localizing Search Suggestions

If you offer your services in multiple languages you can determine which localize suggestions to send by adding the "{Language}" attribute to your query string . The example below shows how to receive language information from the user to serve localize requests:

<Url type="application/x-suggestions+xml" 
	template="http://suggestions.example.com/search.aspx?
	q={searchTerms}&amp;language={Language}" 
/>

When Internet Explorer requests suggestions, it will replace "{Language}" with the Internet Explorer accepted language that's defined on the user's system's locale. The user's system's locale can be set from the Control Panel and from language settings of Internet Explorer from the Internet Options dialog box.

Note  See the section on "Handling Response Errors" above for more information about character encoding that may affect your locale responses.

Remarks

Keep the following guidelines in mind.

  • A Web site cannot automatically launch the Add Search Provider dialog box. It is locked down in the same way that a pop-up blocker locks down Web sites, and can only be launched as the direct result of a user action.
  • Titles should be short, ideally, 16 characters or less. This string is used by the Instant Search box. If the title is longer then the search box, it might be clipped.
  • The title in the link tag should be the same title used by the XML description file. These strings must match so that Search Discovery recognizes that a provider has been installed so that the Instant Search box drop-down arrow doesn't turn orange, or an installed provider doesn't add itself to the list of discovered providers.
  • When a user restores default Internet Explorer settings, all custom search providers are removed.
  • If you are using scripts to add aprovider, you may also want to call the IsSearchProviderInstalled helper method to check if your provider has already been installed.
  • When you create description files, make sure the file is of valid XML syntax and that all characters in your query strings are encoded and that all "&" characters are escaped to "&amp;".
  • Because users can resize the Instant Search box, you can query Internet Explorer 8 to return the search suggestions drop-down dimensions by adding parameters to the URL of your XML description file.

Related Topics

출처 : http://msdn.microsoft.com/en-us/library/cc848862(v=VS.85).aspx

Posted by SB패밀리
IE에서 검색공급자 설치하기

Installing a Search Provider and Setting the Default

Windows Internet Explorer 8 extends a rich searching experience by offering users the option to install multiple search providers. As a user installs search providers, each provider has a chance to set itself as the default provider. Internet Explorer 8 has a new mandatory Search Provider Default user experience that keeps the user in control of their preferred search provider.

This article addresses best practices for setting a default search provider as you write your software to install your service.

In Internet Explorer 7, any program can write the GUID of their search provider to the DefaultScope registry key in HKCU\Software\Microsoft\Internet Explorer\SearchScopes to set the default search provider. Multiple programs can write (and monitor) this registry key, resulting in a confusing experience for the user when multiple programs write to this registry key and issue notification of changes.

To keep the user in control of their browser and their search preference, Internet Explorer 8 informs the user when a program wants to change the search default.

In Internet Explorer 8, writing the DefaultScope registry key still works, but (to keep the user in control) the user will see a dialog (the next time they open Internet Explorer) that informs them of a request to change the search default. The dialog box looks like this:

IE8 search default change notification dialog box
Figure 1: In this example, the user had the Fabrikam Search service as their default, and the Contoso Search software wrote a new setting to the DefaultScope registry key.

This dialog informs the user of the request, but does not give proper attribution to the source of the request.

We recommend that all software use the IOpenServiceManager APIs on Internet Explorer 8 and later to install a search provider and request that the user set it as their default. These APIs allow software to manage their search providers in a supported way that will not conflict with other software already installed on the user's machine. When software requests a search default change using these APIs, the source of the request is properly attributed in the dialog:

Example of the IE8 search default change dialog box
Figure 2: In this example, the software requests a search default change using the recommended SetDefault APIs and clear attribution is displayed. In this case, it is the Contoso.com Internet Search software.

This dialog is displayed as soon as the SetDefault API is called.

We strongly recommend that your software only use methods detailed in this article when setting a search default. Attempts to circumvent the Search Provider Default dialogs is considered inappropriate behavior.

The following code sample shows how to install a search provider and request that the user set it as the default.

#include <windows.h>
#include <atlbase.h>
#include <openservice.h>

    HRESULT hr = E_FAIL;
    BOOL fComInitialized = FALSE;

    if (S_OK == CoInitialize(NULL))
    {
        fComInitialized = TRUE;

        //Open a handle to the OpenService manager
        CComPtr<IOpenServiceManager> spManager;
        hr = spManager.CoCreateInstance(CLSID_OpenServiceManager);

        if (SUCCEEDED(hr))
        {
            CComPtr<IOpenService> spService;

            //Install my search provider
            //URL-OF-SERVICE: See http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_description_elements
            hr = spManager->InstallService(URL-OF-SERVICE, &spService);

            if (hr==S_OK)
            {
                //Request that the user change their search default
                hr = spService->SetDefault(TRUE, NULL);
            }
        }
    }

    if (fComInitialized)
    {
        CoUninitialize();
    }

Note that the SetDefault API will show a dialog (see Figure 2) requesting that the user change their search default. The user can approve or deny this request from the software during installation. If approved, the software can change the default setting. If denied, however, the software should not change user's default settings. The user can change this setting at any time by using the Manage Add-ons dialog.

If the binary that is calling the SetDefault API is signed with a valid code signing certificate, the program name and publisher will be displayed in the Search Provider Default dialog. We recommend code that calls SetDefault be signed.

Related Topics

출처: http://msdn.microsoft.com/en-us/library/ee330719(v=VS.85).aspx

Posted by SB패밀리

Toolbar Button Style Guide

This guide will help you design icons for toolbar buttons that you add to the Windows Internet Explorer user interface.

Sizes

The Internet Explorer toolbar requires two sizes for all toolbar icons: 20x20 pixel and 16x16 pixel. The following table shows the difference between the two icons.

Dimensions (in pixels) Example icon
20x20 20x20 16 color
16x16 16x16 16 color

The 20x20 pixel icon is used with the default Internet Explorer toolbar. The 16x16 pixel icon is used when Internet Explorer is in full-screen mode.

Colors

Internet Explorer uses two states for all toolbar buttons: the active state and the default state.

When the user's mouse is over a toolbar button, it is in the active state. At other times, the toolbar button is in the default state.

In the active state, Internet Explorer uses the appropriate color icon for the toolbar button. In the default state, Internet Explorer uses the appropriate grayscale icon. The following table shows the types of icons used for the different states.

State Example icon
Active 20x20 256 color
Default 20x20 256 shade

In addition to the color differences, Internet Explorer uses two color depths: 256-color/shade icons and 16-color/shade icons. The 256-color/shade icons should be designed using the Windows; halftone palette, while the 16-color/shade icons should use the Windows 16 palette. The following table shows the different color depths used.

Depth Example icon
16-color 20x20 16 color
256-color 20x20 256 color
16-shade 20x20 16 shade
256-shade 20x20 256 shade

Design Tips

There are several things to keep in mind when designing toolbar buttons that are going to be integrated with the Internet Explorer user interface. In general, you will want to:

  • Use the same hues and saturation of colors as in the default toolbar icons to keep a consistent and integrated appearance.
  • Make sure the visual transition between your default and active images is smooth.

For 16-color/shade icons, you will want to:

  • Use the Windows 16-color palette.
  • Add a black border around the icon, except when it affects the readability of the image (like with arrows or "X" icons).
  • Keep a fairly flat appearance (little or no dimensioning or shading).

For 256-color/shade icons, you will want to:

  • Use the Windows halftone palette.
  • Use icon-style borders with gray or color as top and left borders and black as the bottom and right borders.
  • Make them more dimensional, using a light source from the upper-left corner and shading where appropriate.

Placing Icons

Toolbar icons need to be placed in two .ico files. The first .ico file should contain three color icons for your button. They are:

  • 16x16 16-color icon (Required)
  • 20x20 16-color icon (Optional)
  • 20x20 256-color icon (Required)

The second .ico file should contain three grayscale icons. The grayscale icons needed are:

  • 16x16 16-shade (Required)
  • 20x20 16-shade (Optional)
  • 20x20 256-shade (Required)

Currently, the 20x20 16-color/shade icons are not being used, so including them in the .ico files is optional. The 16x16 16-color/shade icons are used in full-screen mode, while the 20x20 256-color/shade icons are used in normal mode.

You can use a drawing or paint program to create the appropriate images for each of the icons. To create the .ico files, you can use a tool like Microsoft Visual Studio.

Related Topics

The following are links to topics related to toolbar buttons.

Overview

Tutorial

출처 : http://msdn.microsoft.com/en-us/library/aa753621(v=VS.85).aspx

Posted by SB패밀리

이 문서에서는 Microsoft Internet Explorer와 Windows Internet Explorer에서 ActiveX 컨트롤 실행을 중지하는 방법을 설명합니다. ActiveX 컨트롤의 CLSID(클래스 식별자)에 대한 Compatibility Flags DWORD 값의 데이터 값을 수정하여 ActiveX 컨트롤을 중지할 수 있습니다.

참고 Microsoft Windows XP 기반 컴퓨터와 Windows Server 2003 기반 컴퓨터의 경우 관리자는 소프트웨어 제한 정책을 사용하여 Active Directory 도메인 환경에 있는 컴퓨터의 프로그램에서 ActiveX 컨트롤이 실행되지 않게 할 수 있습니다. 소프트웨어 제한 정책에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.
중요 이 절, 방법 또는 작업에는 레지스트리를 수정하는 방법에 대한 단계가 포함되어 있습니다. 그러나 레지스트리를 잘못 수정하면 심각한 문제가 발생할 수도 있으므로 다음 단계를 주의하여 수행해야 합니다. 추가 보호 조치로 레지스트리를 수정하기 전에 해당 레지스트리를 백업하는 것이 좋습니다. 이렇게 하면 문제가 발생하는 경우 레지스트리를 복원할 수 있습니다. 레지스트리 백업 및 복원 방법에 대한 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료 문서를 참조하십시오.
322756  (http://support.microsoft.com/kb/322756/ ) Windows XP 및 Windows Server 2003에서 레지스트리를 백업, 편집 및 복원하는 방법


경고 ActiveX 컨트롤에 대한 중지 작업을 취소(unkilling)하지 않는 것이 좋습니다. 취소할 경우 보안 문제가 생길 수 있습니다. kill bit는 일반적으로 중요한 이유로 설정되며 따라서 ActiveX 컨트롤 중지를 취소(unkill)할 때는 주의해야 합니다. 또한 다음 절차는 매우 기술적이므로 절차에 익숙하지 않은 경우에는 진행해서는 안되며 시작하기 전에 전체 절차를 읽어 보아야 합니다.

ActiveX 컨트롤의 CLSID는 해당 컨트롤의 GUID입니다. 기본 설정이 사용될 때 Internet Explorer에서 컨트롤을 호출하지 못하도록 kill bit를 설정함으로써 Internet Explorer에서 ActiveX 컨트롤이 실행되지 않도록 할 수 있습니다.

kill bit는 레지스트리에서 ActiveX 컨트롤의 Compatibility Flags DWORD 값에 대한 특정 값입니다. 이것은 ActiveX 컨트롤에서 "스크립트 사용에 안전" 옵션을 호출하는 것과 다릅니다. "스크립트 사용에 안전" 옵션을 호출하면 Internet Explorer는 컨트롤을 호출한 다음 ActiveX 컨트롤이 안전하지 않을 수 있다는 경고를 표시합니다. 여기서 컨트롤은 사용자의 선택에 따라 실행될 수 있습니다. 그러나 Internet Explorer에서 안전하지 않는 것으로 표시된 ActiveX 컨트롤 초기화 및 스크립트 옵션을 사용하지 않는 경우 ActiveX 컨트롤에 "kill bit"를 설정하면 Internet Explorer에서 해당 컨트롤을 호출하지 않습니다. kill bit를 설정하려면 다음과 같이 하십시오.
  1. 해제할 ActiveX 컨트롤의 CLSID를 확인합니다. 컨트롤의 CLSID를 잘 모르겠으면 제조업체에 문의하십시오. 컨트롤이 설치된 경우 컨트롤의 이름을 알고 있으면 해당 CLSID를 확인할 수 있습니다. CLSID를 확인하려면 HKEY_CLASSES_ROOT\CLSID에서 각 CLSID 키에 대해 ProgID 키의 기본값 문자열 값을 검토합니다. 해제할 컨트롤에 해당하는 CLSID를 식별하기 쉽도록 하려면 해제할 컨트롤을 제외하고 가능하면 많은 ActiveX 컨트롤을 제거해야 할 수 있습니다. ActiveX 컨트롤을 제거하는 방법에 대한 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료 문서를 참조하십시오.
    154850  (http://support.microsoft.com/kb/154850/ ) Windows에서 ActiveX 컨트롤을 제거하는 방법
  2. 레지스트리 편집기를 사용하여 레지스트리 키
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\CLSID of the ActiveX control
    에 있는 ActiveX 개체 CLSID의 Compatibility Flags DWORD 값의 데이터 값을 확인하십시오. 여기서 CLSID of the ActiveX Control은 해당 ActiveX 컨트롤의 클래스 식별자입니다.

    참고 일반적으로 이 레지스트리 키를 수동으로 만들어야 합니다.
  3. Compatibility Flags DWORD 값을 0x00000400으로 변경합니다.
ActiveX 컨트롤에 kill bit가 설정되고 새 버전의 ActiveX 컨트롤이 다른 CLSID를 사용하여 릴리스되는 경우 이전 CLSID를 사용하는 웹 사이트가 계속 의도한 대로 작동되도록 할 수 있습니다. 이렇게 하려면 레지스트리에서 Compatibility Flags 값과 같은 수준에 새 값을 추가하면 됩니다. 이 값은 "AlternateCLSID"라는 이름의 REG_SZ 문자열이어야 합니다. AlternateCLSID 값은 중괄호로 묶여 표시됩니다. 예를 들면 다음과 같습니다.
{ABCDEF12-ABCD-ABCD-ABCD-ABCDEF123456}
예:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\
{CLSID of killed ActiveX control}, Compatibility Flags, 0x0400

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\
{CLSID of killed ActiveX control}, AlternateCLSID, "{CLSID of alternate ActiveX control}"
Internet Explorer는 이 값을 해석한 후, killbit를 수신한 ActiveX 컨트롤이 아니라 AlternateCLSID 값에서 참조된 ActiveX 컨트롤의 인스턴스를 만듭니다.

참고 AlternateCLSID 값을 효율적으로 사용하기 위해서는 kill bit를 초기 CLSID에 설정해야 합니다.
ActiveX 컨트롤 개발자는 "kill bit"와 함께 TreatAs 또는 AlternateCLSID 레지스트리 값을 사용하여 해제된 ActiveX 컨트롤 대신 업데이트된 ActiveX 컨트롤이 제공되었는지를 Internet Explorer에서 확인하도록 할 수 있습니다. TreatAs 값을 사용하는 방법에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.
http://msdn.microsoft.com/ko-kr/library/ms679737(VS.85).aspx (http://msdn.microsoft.com/ko-kr/library/ms679737(VS.85).aspx)
AlternateCLSID 값을 설정하려면 다음과 같이 하십시오.
  1. 레지스트리 편집기를 사용하여 다음 레지스트리 키에서 해제된 ActiveX 개체 CLSID를 찾습니다.
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\CLSID of the ActiveX control
    여기서 CLSID of the ActiveX Control은 해당 ActiveX 컨트롤의 클래스 식별자입니다.

    Compatibility Flags의 값이 DWORD 00000400으로 설정되었음을 볼 수 있습니다.
  2. AlternateCLSID 문자열 값을 CLSID 키에 추가합니다.
  3. AlternateCLSID 문자열 값의 데이터를 {CLSID of the alternate ActiveX control}로 설정합니다. 여기서 {CLSID of the ActiveX Control}은 업데이트된 ActiveX 컨트롤의 클래스 식별자입니다.
AlternateCLSID 값은 Internet Explorer에 업데이트된 ActiveX 컨트롤에 대한 CLSID로 리디렉션하도록 지시합니다. 최대 10수준까지 체인 리디렉션할 수 있습니다.

AlternateCLSID 값은 다음 버전의 Internet Explorer에서 지원됩니다.
  • Windows 2000용 Internet Explorer 5.01 서비스 팩 2 이상(MS03-004 이상 포함)
  • Internet Explorer 5.5 서비스 팩 2(MS02-068 이상 포함)
  • Internet Explorer 6 서비스 팩 1
  • Windows XP용 Internet Explorer 6(MS02-068 이상 포함)
  • Windows Server 2003용 Internet Explorer 6
  • Windows Server 2003 IA64용 Windows Internet Explorer 7
  • Windows XP용 Windows Internet Explorer 7
  • Windows Server 2003용 Windows Internet Explorer 7.0
  • Windows Vista의 Windows Internet Explorer 7.0
참고 이 문서에 나열되지 않은 Internet Explorer 버전은 제품 수명 주기의 연장 기간 내에 있거나 더 이상 지원되지 않는 것입니다. 여기에 나와 있는 Windows 버전과 Internet Explorer 버전에서도 kill bit를 설정할 수 있지만 지원되는 Internet Explorer 버전으로 업그레이드하고 적절한 업데이트를 모두 적용하는 것이 좋습니다. Internet Explorer의 버전을 확인하는 방법에 대한 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료 문서를 참조하십시오.
164539  (http://support.microsoft.com/kb/164539/ ) 설치된 Internet Explorer 버전 확인 방법
ActiveX 컨트롤용 kill bit에 대한 자세한 내용은 다음 Microsoft Security Vulnerability Research & Defense 블로그 게시물을 참조하십시오.
Kill-Bit FAQ: 1/3부
http://blogs.technet.com/srd/archive/2008/02/06/The-Kill_2D00_Bit-FAQ_3A00_-Part-1-of-3.aspx (http://blogs.technet.com/srd/archive/2008/02/06/The-Kill_2D00_Bit-FAQ_3A00_-Part-1-of-3.aspx)
Kill-Bit FAQ: 2/3부
http://blogs.technet.com/srd/archive/2008/02/07/The-Kill_2D00_Bit-FAQ_3A00_-Post-2-of-3.aspx (http://blogs.technet.com/srd/archive/2008/02/07/The-Kill_2D00_Bit-FAQ_3A00_-Post-2-of-3.aspx)
Kill-Bit FAQ: 3/3부
http://blogs.technet.com/srd/archive/2008/02/08/The-Kill_2D00_Bit-FAQ_3A00_-Part-3-of-3.aspx (http://blogs.technet.com/srd/archive/2008/02/08/The-Kill_2D00_Bit-FAQ_3A00_-Part-3-of-3.aspx)


해당 ActiveX 컨트롤에 보안 문제가 있는 응용 프로그램 공급업체는 해당 ActiveX 컨트롤이 Internet Explorer에서 실행되지 못하게 하는 kill bit을 출시할 것을 Microsoft에 요청할 수 있습니다. 승인된 요청은 앞으로 출시될 ActiveX Kill Bits용 업데이트 롤업 보안 권고에서 처리됩니다. Microsoft는 해당 ISV(독립 소프트웨어 공급업체)가 업데이트된 ActiveX 컨트롤 버전을 이미 제작한 경우에만 취약성이 있다고 확인된 ActiveX 컨트롤에 대해 kill bit을 출시합니다. 취약한 ActiveX 컨트롤이 있는 ISV는 해당 요청과 다음 질문에 대한 대답을 함께 전자 메일로 msvr@microsoft.com에 전송할 수 있습니다.
Posted by SB패밀리