검색 처리기 만들기

[이 기능은 Windows XP 또는 이전 버전에서만 지원됩니다. 대신 Windows Search를 사용합니다.]

Shell은 사용자가 파일 또는 프린터와 같은 네임스페이스 개체를 찾을 수 있도록 하는 여러 검색 유틸리티를 지원합니다. 사용자 지정 검색 엔진을 만들고 검색 처리기를 구현하고 등록하여 사용자가 사용할 수 있도록 할 수 있습니다.

셸 확장 처리기를 구현하고 등록하는 일반적인 절차는 셸 확장 처리기 만들기에서 설명합니다. 이 문서에서는 검색 처리기와 관련된 구현의 이러한 측면에 중점을 둡니다.

검색 처리기의 작동 방식

사용자는 검색 엔진을 선택하는 두 가지 방법이 있습니다. 첫 번째 방법은 시작 메뉴 것입니다. Windows 2000 이전 시스템에서 시작 메뉴에서 찾기 명령을 선택하면 사용 가능한 검색 엔진의 하위 메뉴가 표시됩니다. Windows 2000 이상에서는 Start 메뉴의 찾기 명령 이름이 검색으로 바뀝니다. 다음 그림에서는 Windows XP 시스템의 검색 단추를 보여 줍니다.

the start menu's search submenu

사용자는 Windows 탐색기에서 검색을 시작할 수도 있습니다. Windows 2000 이전 시스템에서는 도구 메뉴에서 찾기 명령을 클릭하여 시작 메뉴와 연결된 것과 기본적으로 동일한 메뉴를 표시합니다. 그러나 Windows 2000용 Windows 탐색기는 검색 엔진을 매우 다른 방식으로 처리합니다. 이제 도구 메뉴의 하위 메뉴로 검색 엔진을 처리하는 대신 도구 모음에 검색 단추가 있습니다. 이 단추를 클릭하면 탐색기 모음의 검색 창이 열립니다. 다음 그림에서는 파일 및 폴더 검색 창을 보여 줍니다 .

the windows explorer bar's search pane

Windows 2000 및 이전 시스템에서 구현과 등록 모두에 영향을 주는 검색 처리기를 관리하는 방법에는 여러 가지 차이점이 있습니다.

Windows 2000 이전 Windows 2000 이상
검색 처리기는 바로 가기 메뉴 처리기의 유형으로 구현됩니다. 검색 처리기는 바로 가기 메뉴 처리기 또는 DHTML(동적 HTML) 문서로 구현할 수 있습니다.
검색 처리기는 정적 또는 동적일 수 있습니다. 정적 처리기는 사용자가 선택한 경우에만 로드됩니다. 동적 처리기는 시작 시 셸에 의해 로드되며 셸이 종료될 때까지 종료되지 않습니다. 바로 가기 메뉴 처리기로 구현된 처리기는 정적 또는 동적일 수 있습니다. DHTML 문서로 구현된 처리기는 정적이어야 합니다.
검색 처리기는 시작 메뉴의 찾기 하위 메뉴와 Windows 탐색기 도구 메뉴의 찾기 하위 메뉴에 표시됩니다. 검색 처리기는 시작 메뉴의 검색 하위 메뉴에만 표시됩니다. Windows 탐색기 메뉴 모음을 통해 사용자 지정 검색 창을 사용할 수 있도록 하려면 밴드 개체구현해야 합니다. 그런 다음 Windows 탐색기 보기 메뉴의 탐색기 모음 하위 메뉴에 나열됩니다.

 

검색 처리기 등록

검색 처리기는 파일 형식의 FindExtensions하위 키 아래에 등록됩니다.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions

이 시점에서 등록 프로시저는 처리기가 정적인지 동적인지에 따라 달라집니다. 셸 확장 처리기를 등록하는 방법에 대한 일반적인 내용은 셸 확장 처리기 만들기를 참조 하세요.

정적 검색 처리기 등록

정적 검색 처리기는 사용자가 시작할 때만 로드됩니다. 이 방법은 작고 신속하게 로드할 수 있는 DLL에 가장 적합합니다. DHTML을 사용하여 처리기를 구현하는 경우 정적이어야 합니다. 정적 확장 처리기를 등록하려면 FindExtensions 하위 키의 정적 하위 키 아래에 처리기의 이름이 지정된 하위 키를 만듭니다. 이 이름은 시스템에서 사용되지 않지만 FindExtensions 하위 키 아래의 다른 검색 처리기 이름과 동일해서는 안 됩니다.

바로 가기 메뉴 기반 검색 처리기

처리기가 바로 가기 메뉴 처리기로 구현되는 경우 처리기 이름 하위 키의 기본값을 CLSID(개체의 클래스 식별자) GUID로 설정합니다. 처리기의 이름 하위 키 아래에 0이라는 하위 키를 만들고 해당 기본값을 검색 또는 찾기 하위 메뉴에 표시할 문자열로 설정합니다. 바로 가기 문자 앞에 앰퍼샌드(&A)를 추가하여 일반적인 방법으로 바로 가기 키를 사용하도록 설정할 수 있습니다. 0 하위 키 아래에 DefaultIcon 하위 키를 만들어 메뉴 텍스트의 오른쪽에 선택적 작은 아이콘을 표시할 수 있습니다. 기본값을 아이콘이 포함된 파일의 경로와 쉼표, 아이콘의 0부터 시작하는 인덱스가 포함된 문자열로 설정합니다.

다음 예제에서는 MySearchEngine 검색 처리기를 등록합니다. 메뉴 텍스트는 "내 검색 엔진"이며 M은 바로 가기 키로 지정됩니다. 아이콘은 인덱스가 2인 C:\MyDir\MySearch.dll에 있습니다.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions
                     Static
                        MySearchEngine
                           (Default) = {MySearchEngine CLSID GUID}
                           0
                              (Default) = &My Search Engine
                              DefaultIcon
                                 (Default) = c:\MyDir\MySearch.dll,2

DHTML 기반 검색 처리기

Windows 2000에서는 검색 처리기를 DHTML 문서로 구현할 수도 있습니다. 해당 이름은 시작 메뉴의 검색 하위 메뉴에 나열됩니다. 사용자가 선택하면 검색 문서에 대해 탐색기 표시줄이 열려 있는 Windows 탐색기가 시작됩니다. 탐색기 표시줄 오른쪽에 표시할 DHTML 문서를 지정할 수도 있습니다. 기본 검색 창에서 다른 처리기를 시작할 수 있는 방법은 없습니다. 검색 엔진은 Windows 탐색기에서 직접 시작할 수 있지만 대역 개체구현된 경우에만 실행할 수 있습니다.

DHTML 기반 검색 처리기를 등록하려면 처리기의 이름 하위 키를 CLSID_ShellSearchExt 문자열 형식(현재 {169A0691-8DF9-11d1-A1C4-00C04FD75D13})으로 설정하고 다음 하위 키를 만듭니다.

  1. 처리기 이름 하위 키 아래에 0(0) 하위 키를 만들고 기본값을 메뉴 텍스트로 설정합니다.
  2. 메뉴 텍스트 옆에 아이콘을 표시하려면 0 아래에 DefaultIcon 하위 키를 만들고 기본값을 아이콘의 경로 및 인덱스로 설정합니다.
  3. 0에서 SearchGUID 하위 키를 만듭니다. DHTML 문서에 GUID를 할당하고 SearchGUID기본값을 문자열 형식으로 설정합니다. 이 GUID는 HKEY_CLASSES_ROOT\CLSID등록할 필요가 없습니다.
  4. SearchGUID 아래에 URL 하위 키를 만듭니다. 기본값을 탐색기 표시줄에 표시할 HTML 문서의 경로로 설정합니다.
  5. SearchGUID 아래에 UrlNavNew 하위 키를 만듭니다. 기본값을 탐색기 표시줄 오른쪽에 표시되는 HTML 문서의 경로로 설정합니다.

다음 예제에서는 DHTML 문서로 구현된 MySearchEngine 검색 처리기를 등록합니다. 메뉴 텍스트는 "내 검색 엔진"이며 M은 바로 가기 키로 지정됩니다. 아이콘은 인덱스가 2인 C:\MyDir\MySearch.dll에 있습니다. 탐색기 모음의 DHTML 문서는 C:\MyDir\MySearch.htm이며 탐색기 표시줄 오른쪽에 표시되는 문서는 C:\MyDir\MySearchPage.htm입니다.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions
                     Static
                        MySearchEngine
                           (Default) = {169A0691-8DF9-11d1-A1C4-00C04FD75D13}
                           0
                              (Default) = &My Search Engine
                              DefaultIcon
                                 (Default) = c:\MyDir\MySearch.dll,2
                                 SearchGUID
                                    (Default) = {My Search GUID}
                                    Url
                                       (Default) = C:\MyDir\MySearch.htm
                                    UrlNavNew
                                       (Default) = C:\MyDir\MySearchPage.htm

동적 검색 처리기 등록

처리기가 바로 가기 메뉴 처리기로 구현되는 경우 동적 처리기로 등록할 수도 있습니다. 이 경우 셸과 함께 로드되고 셸이 종료될 때만 종료됩니다. 동적 검색 처리기는 사용자가 시작할 때 정적 처리기보다 훨씬 빠르게 응답합니다. 이 방법은 처리기의 DLL을 로드하는 데 시간이 오래 걸리거나 자주 호출될 가능성이 있는 경우에 가장 적합합니다.

동적 검색 처리기는 FindExtensions 하위 키 아래에 등록됩니다.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions

처리기에 명명된 FindExtensions 하위 키를 만들고 해당 기본값을 처리기의 CLSID GUID로 설정합니다. 동적 검색 처리기에는 메뉴 아이콘이 지원되지 않습니다. 다음 예제에서는 MySearchEngine을 동적 검색 처리기로 등록합니다.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions
                     MySearchEngine
                        (Default) = {MySearchEngine CLSID GUID}
                        0
                           (Default) = &My Search Engine

정적 검색 처리기와 달리 레지스트리에서 메뉴 텍스트를 지정하지 않습니다. 처리기가 로드되면 셸은 처리기의 IContextMenu::QueryContextMenu 메서드를 호출하여 Find 또는 Search 하위 메뉴에 항목을 추가합니다.

검색 처리기 구현

검색 처리기는 모든 버전의 Windows에 대한 바로 가기 메뉴 처리기로 구현할 수 있습니다. Windows 2000의 경우 DHTML 문서로 구현할 수도 있습니다.

바로 가기 메뉴 처리기를 구현하는 방법에 대한 일반적인 내용은 상황에 맞는 메뉴 처리기 만들기를 참조 하세요. 검색 처리기는 몇 가지 방법으로 표준 바로 가기 메뉴 처리기와 다릅니다.

정적 메뉴 처리기의 경우 레지스트리의 정보에서 찾기 또는 검색 하위 메뉴가 만들어집니다. 일반적인 바로 가기 메뉴 처리기처럼 처리기에서 메뉴 항목을 추가할 필요가 없습니다. Shell은 다음과 같은 방법으로 정적 메뉴 처리기를 관리합니다.

  • 사용자가 처리기의 메뉴 항목을 시작하면 셸은 처리기의 DLL을 로드하고 IContextMenu::InvokeCommand를 호출하여 처리기에 검색 엔진을 시작하도록 알립니다. IShellExtInit::InitializeIContextMenu::QueryContextMenu 메서드가 호출되지 않습니다.
  • IContextMenu::InvokeCommand가 호출되면 전달된 CMINVOKECOMMANDINFO 구조체의 lpVerb 멤버가 명령을 식별합니다. lpVerb하위 단어는 명령의 하위 키 이름에 해당하는 숫자로 설정됩니다. 이 하위 키의 이름은 일반적으로 0이므로 lpVerb은 일반적으로 0으로 설정됩니다. 그러면 처리기가 검색 엔진을 시작합니다.

동적 검색 처리기는 일반 바로 가기 메뉴 처리기와 거의 동일한 방식으로 구현됩니다. 주요 예외는 IShellExtInit::Initialize가 호출될 때 pidlFolderlpdobj 인수가 NULL로 설정된다는 것입니다.

DHTML 기반 검색 처리기는 일반 DHTML 문서로 구현됩니다. Windows Internet Explorer에서 지원하는 HTML, DHTML 또는 스크립팅 기술을 포함할 수 있습니다.