셸 확장 처리기 등록

Shell 확장 처리기 개체를 등록해야 Shell에서 사용할 수 있습니다. 이 항목에서는 셸 확장 처리기를 등록하는 방법에 대한 일반적인 설명입니다.

셸 확장 처리기를 만들거나 변경할 때마다 변경했음을 시스템에 알리는 것이 중요합니다. 이렇게 하려면 SHChangeNotify를 호출하고 SHCNE_ASSOCCHANGED 이벤트를 지정합니다. SHChangeNotify를 호출하지 않으면 시스템이 다시 부팅될 때까지 변경 내용이 인식되지 않을 수 있습니다.

Windows 2000 시스템에 적용되는 몇 가지 추가 요인이 있습니다. 자세한 내용은 Windows 2000 시스템에서 셸 확장 처리기 등록 섹션을 참조하세요 .

모든 COM(구성 요소 개체 모델) 개체와 마찬가지로 windows SDK(소프트웨어 개발 키트)와 함께 제공되는 Guidgen.exe 같은 도구를 사용하여 처리기에 대한 GUID를 만들어야 합니다. 이름이 해당 GUID의 문자열 형식인 HKEY_CLASSES_ROOT\CLSID 아래에 하위 키를 만듭니다. Shell 확장 처리기는 In-process 서버이므로 (기본값) 값이 처리기의 DLL 경로로 설정된 해당 GUID 하위 키 아래에 InprocServer32 하위 키도 만들어야 합니다. 아파트 스레딩 모델을 사용합니다. 예는 다음과 같습니다.

HKEY_CLASSES_ROOT
   CLSID
      {00021500-0000-0000-C000-000000000046}
         InprocServer32
            (Default) = %windir%\System32\Example.dll
            ThreadingModel = Apartment

Shell이 Shell 확장 처리기를 포함할 수 있는 작업을 수행할 때마다 적절한 레지스트리 하위 키를 확인합니다. 확장 처리기가 등록된 하위 키는 호출될 때 컨트롤을 제어합니다. instance 경우 셸이 파일 형식의 멤버에 대한 바로 가기 메뉴를 표시할 때 라는 바로 가기 메뉴 처리기를 사용하는 것이 일반적입니다. 이 경우 처리기는 파일 형식의 ProgID 하위 키 아래에 등록되어야 합니다.

이 항목에서는 다음 주제에 대해 설명합니다.

처리기 이름

Shell 확장 처리기를 사용하도록 설정하려면 ProgID(파일 형식의 경우) 또는 Shell 개체 형식 이름(predefined_shell_objects)의 ShellEx 하위 키 아래에 처리기 하위 키 이름(아래 참조)을 사용하여 하위 키를 만듭니다.

예를 들어 MyProgram.1에 대한 바로 가기 메뉴 확장 처리기를 등록하려는 경우 먼저 다음 하위 키를 만듭니다.

HKEY_CLASSES_ROOT
   MyProgram.1
      ShellEx
         ContextMenuHandlers

다음 처리기의 경우 셸 확장의 CLSID(클래스 식별자)의 문자열 버전으로 명명된 "처리기 하위 키 이름" 하위 키 아래에 하위 키를 만듭니다. 여러 하위 키를 만들어 처리기 하위 키 이름 아래에 여러 확장을 등록할 수 있습니다.

Handler 인터페이스 처리기 하위 키 이름
열 공급자 처리기 IColumnProvider ColumnHandlers
바로 가기 메뉴 처리기 IContextMenu ContextMenuHandlers
Copyhook 처리기 ICopyHook CopyHookHandlers
끌어서 놓기 처리기 IContextMenu DragDropHandlers
속성 시트 처리기 IShellPropSheetExt PropertySheetHandlers

 

다음 처리기의 경우 "처리기 하위 키 이름" 키의 기본값은 셸 확장의 CLSID 문자열 버전입니다. 이러한 처리기에 대해 하나의 확장만 등록할 수 있습니다.

Handler 인터페이스 처리기 하위 키 이름
데이터 처리기 Idataobject DataHandler
드롭 처리기 Idroptarget DropHandler
아이콘 처리기 IExtractIconA/W IconHandler
썸네일 이미지 처리기 IThumbnailProvider {E357FCCD-A995-4576-B01F-234630154E96}
정보 팁 처리기 IQueryInfo {00021500-0000-0000-C000-000000000046}
셸 링크(ANSI) IShellLinkA {000214EE-0000-0000-C000-000000000046}
셸 링크(UNICODE) IShellLinkW {000214F9-0000-0000-C000-000000000046}
구조적 스토리지 IStorage {0000000B-0000-0000-C000-000000000046}
메타데이터 IPropertySetStorage PropertyHandler
시작 메뉴에 고정 IStartMenuPinnedList {a2a9545d-a0c2-42b4-9708-a0b2badd77c8}
작업 표시줄에 고정 {90AA3A4E-1CBA-4233-B8BB-535773D48449}

 

시작 메뉴에 고정을 추가하고 항목의 바로 가기 메뉴에 작업 표시줄에 고정하도록 지정된 하위 키는 IsShortCut 항목을 포함하는 파일 형식에만 필요합니다.

미리 정의된 셸 개체

Shell은 파일 형식과 동일한 방식으로 확장할 수 있는 HKEY_CLASSES_ROOT 아래에 추가 개체를 정의합니다. 예를 들어 모든 파일에 대한 속성 시트 처리기를 추가하려면 PropertySheetHandlers 하위 키 아래에 등록할 수 있습니다.

HKEY_CLASSES_ROOT
   *
      shellex
         PropertySheetHandlers

다음 표에서는 확장 처리기를 등록할 수 있는 HKEY_CLASSES_ROOT 다양한 하위 키를 제공합니다. 나열된 모든 하위 키에는 많은 확장 처리기를 등록할 수 없습니다. 자세한 내용은 특정 처리기의 설명서를 참조하세요.

하위 키 설명 가능한 처리기
* 모든 파일 바로 가기 메뉴, 속성 시트, 동사(아래 참조)
AllFileSystemObjects 모든 파일 및 파일 폴더 바로 가기 메뉴, 속성 시트, 동사
폴더 모든 폴더 바로 가기 메뉴, 속성 시트, 동사
디렉터리 파일 폴더 바로 가기 메뉴, 속성 시트, 동사
Directory\Background 파일 폴더 배경 바로 가기 메뉴만
DesktopBackground 바탕 화면 배경(Windows 7 이상) 바로 가기 메뉴, 동사
드라이브 MyComputer의 모든 드라이브(예: "C:\" 바로 가기 메뉴, 속성 시트, 동사
Network 전체 네트워크(내 네트워크 위치 아래) 바로 가기 메뉴, 속성 시트, 동사
Network\Type\ # #형식의 모든 개체(아래 참조) 바로 가기 메뉴, 속성 시트, 동사
Netshare 모든 네트워크 공유 바로 가기 메뉴, 속성 시트, 동사
NetServer 모든 네트워크 서버 바로 가기 메뉴, 속성 시트, 동사
network_provider_name 네트워크 공급자 "network_provider_name"에서 제공하는 모든 개체 바로 가기 메뉴, 속성 시트, 동사
프린터 모든 프린터 바로 가기 메뉴, 속성 시트
AudioCD CD 드라이브의 오디오 CD 동사만
Dvd DVD 드라이브(Windows 2000) 바로 가기 메뉴, 속성 시트, 동사

 

참고

  • 파일 폴더 배경 바로 가기 메뉴는 파일 폴더 내에서 마우스 오른쪽 단추를 클릭하여 액세스하지만 폴더의 내용을 통해 액세스하지는 않습니다.
  • "동사"는 HKEY_CLASSES_ROOT\하위 키\\동사 아래에 등록된 특수 명령입니다.
  • 네트워크\형식\#의 경우 "#"은 10진수의 네트워크 공급자 유형 코드입니다. 네트워크 공급자 유형 코드는 네트워크 유형의 상위 단어입니다. 네트워크 유형 목록은 Winnetwk.h 헤더 파일(WNNC_NET_* 값)에 제공됩니다. 예를 들어 WNNC_NET_SHIVA 0x00330000 있으므로 해당 형식 하위키는네트워크\\ 유형51에 HKEY_CLASSES_ROOT\.
  • "network_provider_name"는 WNetGetProviderName에서 지정한 네트워크 공급자 이름이며 공백은 밑줄로 변환됩니다. 예를 들어 Microsoft 네트워킹 네트워크 공급자가 설치된 경우 공급자 이름은 "Microsoft Windows 네트워크"이고 해당 network_provider_nameMicrosoft_Windows_Network.

확장 처리기 등록의 예

특정 처리기를 사용하도록 설정하려면 처리기의 이름을 사용하여 확장 처리기 형식 하위 키 아래에 하위 키를 만듭니다. 셸은 처리기의 이름을 사용하지 않지만 해당 형식 하위 키 아래의 다른 모든 이름과 달라야 합니다. 이름 하위 키의 기본값을 처리기 GUID의 문자열 형식으로 설정합니다.

다음 예제에서는 .myp 파일 형식 예제를 사용하여 바로 가기 메뉴 및 속성 시트 확장 처리기를 사용하도록 설정하는 레지스트리 항목을 보여 줍니다.

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
   CLSID
      {00000000-1111-2222-3333-444444444444}
         InProcServer32
            (Default) = C:\MyDir\MyCommand.dll
            ThreadingModel = Apartment
      {11111111-2222-3333-4444-555555555555}
         InProcServer32
            (Default) = C:\MyDir\MyPropSheet.dll
            ThreadingModel = Apartment
   MyProgram.1
      (Default) = MyProgram Application
      Shellex
         ContextMenuHandler
            MyCommand
               (Default) = {00000000-1111-2222-3333-444444444444}
         PropertySheetHandlers
            MyPropSheet
               (Default) = {11111111-2222-3333-4444-555555555555}

셸 확장 처리기 초기화