셸 확장 처리기 등록
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}
관련 항목