Shell 확장 처리기 개체를 셸에서 사용하려면 먼저 셸 확장 처리기 개체를 등록해야 합니다. 이 항목에서는 셸 확장 처리기를 등록하는 방법에 대한 일반적인 설명입니다.
셸 확장 처리기를 만들거나 변경할 때마다 변경한 내용을 시스템에 알리는 것이 중요합니다. 이렇게 하려면 SHChangeNotify호출하고 SHCNE_ASSOCCHANGED 이벤트를 지정합니다. SHChangeNotify 호출하지 않으면 시스템이 다시 부팅될 때까지 변경 내용이 인식되지 않을 수 있습니다.
Windows 2000 시스템에 적용되는 몇 가지 추가 요소가 있습니다. 자세한 내용은 Windows 2000 Systems에서 셸 확장 처리기 등록 섹션을 참조하세요.
모든 COM(구성 요소 개체 모델) 개체와 마찬가지로 windows SDK(소프트웨어 개발 키트)와 함께 제공되는 Guidgen.exe같은 도구를 사용하여 처리기에 대한 GUID를 만들어야 합니다. 이름이 해당 GUID의 문자열 형식인 HKEY_CLASSES_ROOT\CLSID 아래에 하위 키를 만듭니다. 셸 확장 처리기가 In-Process 서버이므로, 처리기의 DLL 경로로 설정된 (기본값) 값을 사용하여 해당 GUID 하위 키 아래에 InprocServer32 하위 키를 만들어야 합니다. 아파트먼트 스레딩 모델을 사용합니다. 예제는 다음과 같습니다.
HKEY_CLASSES_ROOT
CLSID
{00021500-0000-0000-C000-000000000046}
InprocServer32
(Default) = %windir%\System32\Example.dll
ThreadingModel = Apartment
Shell이 셸 확장 처리기를 포함할 수 있는 작업을 수행할 때마다 적절한 레지스트리 하위 키를 확인합니다. 확장 처리기가 호출될 때 컨트롤을 등록하는 하위 키입니다. 예를 들어 셸에서 파일 형식의 멤버에 대한 바로 가기 메뉴를 표시할 때 바로 가기 메뉴 처리기를 호출하는 것이 일반적입니다. 이 경우 처리기는 파일 형식의 ProgID 하위 키에 등록되어야 합니다.
이 항목에서는 다음 주제에 대해 설명합니다.
- 처리기 이름
- 미리 정의된 셸 개체
- 확장 핸들러 등록의 예제
- 관련 항목
처리기 이름
Shell 확장 처리기를 사용하도록 설정하려면 ProgID(파일 형식의 경우) 또는 Shell 개체 형식 이름(predefined_shell_objects)의 ShellEx 하위 키 아래에 처리기 하위 키 이름(아래 참조)을 사용하여 하위 키를 만듭니다.
예를 들어 MyProgram.1에 대한 바로 가기 메뉴 확장 처리기를 등록하려면 먼저 다음 하위 키를 만듭니다.
HKEY_CLASSES_ROOT
MyProgram.1
ShellEx
ContextMenuHandlers
다음 처리기의 경우 셸 확장의 CLSID(클래스 식별자)의 문자열 버전으로 명명된 "처리기 하위 키 이름" 하위 키 아래에 하위 키를 만듭니다. 여러 하위 키를 만들어 처리기 하위 키 이름 아래에 여러 확장을 등록할 수 있습니다.
| 핸들러 | 인터페이스 | 핸들러 하위 키 이름 |
|---|---|---|
| 열 공급자 처리기 | IColumnProvider (아이컬럼프로바이더) | ColumnHandlers |
| 바로 가기 메뉴 처리기 | IContextMenu | ContextMenuHandlers |
| Copyhook 처리기 | ICopyHook | CopyHookHandlers |
| 드래그 앤 드롭 처리기 | IContextMenu | 드래그드롭핸들러 |
| 속성 시트 처리기 | IShellPropSheetExt | PropertySheetHandlers |
다음 처리기의 경우 "처리기 하위 키 이름" 키의 기본값은 셸 확장의 CLSID 문자열 버전입니다. 이러한 처리기에 대해 하나의 확장만 등록할 수 있습니다.
| 처리기 | 인터페이스 | 핸들러 하위 키 이름 |
|---|---|---|
| 데이터 처리기 | IDataObject | DataHandler |
| 드롭 처리기 | IDropTarget | DropHandler |
| 아이콘 처리기 | IExtractIconA/W | IconHandler |
| 썸네일 이미지 처리기 | IThumbnailProvider | {E357FCCD-A995-4576-B01F-234630154E96} |
| Infotip 처리기 | 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 | 모든 파일 및 파일 폴더 | 바로 가기 메뉴, 속성 시트, 동사 |
| 폴더 | 모든 폴더 | 바로 가기 메뉴, 속성 시트, 동사 |
| 디렉터리 | 파일 폴더 | 바로 가기 메뉴, 속성 시트, 명령어 |
| 디렉토리\배경 | 파일 폴더 배경 | 바로 가기 메뉴만 |
| 바탕화면 | 데스크톱 배경(Windows 7 이상) | 바로 가기 메뉴, 동사 |
| 드라이브 | MyComputer의 모든 드라이브(예: "C:\") | 바로 가기 메뉴, 속성 시트, 동사 |
| 네트워크 | 전체 네트워크(내 네트워크 위치 아래) | 바로 가기 메뉴, 속성 시트, 동사 |
| Network\Type\# | #형식의 모든 개체(아래 참조) | 바로 가기 메뉴, 속성 페이지, 동사 |
| NetShare | 모든 네트워크 공유 | 바로 가기 메뉴, 속성 창, 동사 |
| NetServer | 모든 네트워크 서버 | 바로 가기 메뉴, 속성 시트, 동사 |
| 네트워크 제공자 이름 | 네트워크 공급자에서 제공하는 모든 개체 "network_provider_name" | 바로 가기 메뉴, 속성 시트, 동사 |
| 프린터 | 모든 프린터 | 바로 가기 메뉴, 속성 시트 |
| AudioCD | CD 드라이브의 오디오 CD | 동사만 |
| DVD | DVD 드라이브(Windows 2000) | 바로 가기 메뉴, 속성 시트, 동사 |
노트
- 파일 폴더 배경 바로 가기 메뉴는 파일 폴더 내에서 마우스 오른쪽 단추를 클릭하여 액세스하지만 폴더의 내용을 마우스 오른쪽 단추로 클릭하지는 않습니다.
- "동사"는 HKEY_CLASSES_ROOT\하위 키\Shell\동사따라 등록된 특수 명령입니다.
- Network\형식\#"#"은 10진수의 네트워크 공급자 형식 코드입니다. 네트워크 공급자 유형 코드는 네트워크 유형의 상위 단어입니다. 네트워크 유형 목록은 Winnetwk.h 헤더 파일(WNNC_NET_* 값)에 제공됩니다. 예를 들어 WNNC_NET_SHIVA는 0x00330000으로, 해당 형식 하위 키는 HKEY_CLASSES_ROOT\네트워크\형식\51입니다.
- "network_provider_name"는 WNetGetProviderName지정한 네트워크 공급자 이름이며 공백은 밑줄로 변환됩니다. 예를 들어, Microsoft 네트워킹 네트워크 공급자가 설치되어 있을 경우, 공급자 이름은 "Microsoft Windows Network"이며, 해당 network_provider_name은 Microsoft_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}
관련 항목