열 처리기 만들기
[이 기능은 Windows XP 이하에서만 지원됩니다. ]
Windows Windows Explorer 세부 정보 보기에는 일반적으로 여러 표준 열이 표시됩니다. 각 열에는 현재 폴더의 각 파일에 대한 파일 크기 또는 형식과 같은 정보가 나열됩니다. 열 처리기를 구현하고 등록하면 사용자 지정 열을 표시할 수 있습니다.
셸 확장 처리기를 구현하고 등록하는 일반적인 절차는 셸 확장 처리기 만들기에서 설명합니다. 이 문서에서는 열 처리기와 관련된 구현의 이러한 측면에 중점을 둡니다.
다음 항목을 다룹니다.
열 처리기의 작동 방식
다음 그림에서는 세부 정보 보기의 Windows Explorer 보여 줍니다.
Windows 2000에서는 폴더가 기본적으로 표시되지 않는 여러 열을 지원할 수도 있습니다. 사용자는 열 머리글 중 하나를 마우스 오른쪽 단추로 클릭하고 메뉴에서 자세히... 명령을 선택하여 추가 열을 표시할 수 있습니다. 그런 다음 폴더에 사용 가능한 열을 나열하고 사용자가 표시할 열을 선택할 수 있는 대화 상자가 나타납니다. 다음 그림에서는 앞의 예제에 대한 이 대화 상자를 보여 줍니다.
열 처리기를 만들어 사용자 지정 열을 만들고 해당 목록에 추가할 수 있습니다. 예를 들어 음악이 포함된 파일 컬렉션은 열 처리기를 사용하여 각 파일에 포함된 아티스트와 조각을 나열하는 열을 표시할 수 있습니다.
열 처리기는 Windows Explorer 세부 정보 보기를 표시할 때마다 호출되는 전역 개체입니다. 그러나 열 처리기는 일반적으로 특정 파일 형식의 멤버에 대해서만 사용자 지정 열을 표시하는 데 사용됩니다. 세부 정보 보기를 표시하기 전에 Windows Explorer 등록된 모든 열 처리기를 열 특성에 대해 쿼리합니다. 사용자가 처리기의 열 중 하나를 선택한 경우 Windows Explorer 연결된 데이터에 대한 처리기를 쿼리합니다. 열 처리기가 데이터에 대한 요청을 받으면 파일이 지원되는 형식의 멤버인 경우 이를 제공합니다. 그렇지 않으면 S_FALSE 반환하여 요청을 무시합니다.
열 처리기 등록
열 처리기는 다음 하위 키 아래에 등록됩니다.
HKEY_CLASSES_ROOT
Folder
shellex
ColumnHandlers
CLSID(처리기 클래스 식별자) GUID의 문자열 형식으로 명명된 ColumnHandlers 의 하위 키를 만듭니다. Shell 확장 처리기를 등록하는 방법에 대한 일반적인 내용은 셸 확장 처리기 만들기를 참조하세요. 다음 예제에서는 열 처리기를 등록하는 방법을 보여 줍니다.
HKEY_CLASSES_ROOT
Folder
shellex
ColumnHandlers
{My Column Handler CLSID GUID}
열 처리기 구현
모든 Shell 확장 처리기와 마찬가지로 열 처리기는 DLL로 구현된 COM(In-process Component Object Model) 개체입니다. IUnknown 외에도 IColumnProvider 인터페이스를 내보냅니다.
Windows Explorer IColumnProvider에서 내보낸 세 가지 메서드를 호출하여 열을 표시하는 데 필요한 정보를 요청합니다. Windows Explorer 사용하는 절차는 다음과 같습니다.
- IColumnProvider::Initialize를 호출하여 표시할 폴더를 지정합니다.
- IColumnProvider::GetColumnInfo를 호출하여 열의 식별자 및 특성을 검색합니다.
- 사용자가 열을 선택한 경우 폴더의 각 파일에 대해 IColumnProvider::GetItemData 를 호출하여 파일의 열 항목에 속한 데이터를 검색합니다.
Initialize 메서드
Windows Explorer IColumnProvider::Initialize를 호출하여 열 처리기를 초기화합니다. 메서드에는 세 개의 매개 변수가 있지만 현재 는 wszFolder 만 사용됩니다. 세부 정보 보기가 표시될 폴더로 설정됩니다. 나중에 사용할 폴더 이름을 저장하고 필요에 따라 처리기 개체를 초기화합니다.
GetColumnInfo 메서드
Windows Explorer 다음으로 IColumnProvider::GetColumnInfo를 호출하여 열의 식별자 및 특성을 요청합니다. dwIndex 매개 변수의 열에 대한 인덱스를 전달합니다. 이 인덱스는 열을 열거하는 데 사용되는 임의의 값입니다. Windows Explorer SHCOLUMNINFO 구조체에 대한 포인터를 전달합니다. 이 구조체는 열의 식별자 및 특성을 반환하는 데 사용됩니다. IColumnProvider::GetColumnInfo 는 구조체의 멤버에 적절한 값을 할당하고 반환해야 합니다.
열은 FMTID(OLE 속성 집합 ID) 및 PID(연결된 속성 ID)로 식별됩니다. SHCOLUMNINFO 구조체의 첫 번째 멤버인 scid는 열을 식별하는 데 사용되는 SHCOLUMNID 구조체에 대한 포인터입니다. fmtid 멤버는 열의 FMTID를 보유하고 pid 멤버는 열의 PID를 보유합니다. 예를 들어 열을 식별하는 데 일반적으로 사용되는 표준 FMTID/PID 쌍은 요약 정보 속성 집합의 Author PID입니다.
가능하면 처리기는 기존 FMTID 및 PID를 사용하여 지원하는 열을 식별해야 합니다. 사용자 지정 SHCOLUMNID 구조를 사용하는 경우 열은 처리기에서 지원하는 파일에 대한 데이터만 표시합니다. 폴더에 다른 파일이 포함된 경우 해당 항목은 비어 있습니다. 폴더에 둘 이상의 파일 형식의 파일이 포함된 경우 표준 FMTID/PID 값을 사용하면 다른 형식의 데이터를 동일한 열로 병합할 수 있습니다.
vt 멤버를 열에 표시할 데이터의 VARIANT 형식으로 설정합니다. 대부분의 열은 데이터를 문자 문자열로 표시하므로 가장 일반적으로 사용되는 형식은 VT_LPSTR. SHCOLUMNINFO 구조체의 나머지 멤버는 열의 특성을 정의하는 데 사용됩니다. 적절한 값을 할당합니다.
GetItemData 메서드
열 처리기의 열을 선택한 경우 Windows Explorer 표시할 폴더의 각 파일에 대해 IColumnProvider::GetItemData를 호출합니다. pscid 매개 변수는 열을 식별하는 SHCOLUMNID 구조체에 대한 포인터입니다. pscd 매개 변수는 특정 파일을 식별하는 SHCOLUMNDATA 구조를 가리킵니다.
pvarData 매개 변수는 pscd로 지정된 파일의 처리기 열에 표시되어야 하는 데이터를 반환합니다. 해당 파일이 열 처리기에서 지원되는 경우 pvarData 에 해당 데이터 값을 할당하고 S_OK 반환합니다. 열 처리기에서 파일을 지원하지 않는 경우 pvarData에 값을 할당하지 않고 S_FALSE 반환합니다.
많은 폴더에는 특정 열 처리기에서 지원되지 않는 여러 파일이 포함됩니다. 효율성을 개선하기 위해 IColumnProvider::GetItemData는 먼저 pscd가 가리키는 구조체의 pwszExt 멤버를 검사 합니다. 이 멤버는 파일 이름 확장명을 보유합니다. 확장명에서 파일이 처리기에서 지원하는 파일 형식의 멤버가 아님을 나타내는 경우 S_FALSE 즉시 반환하여 불필요한 처리를 방지합니다.