2009-07-07 3 views
1

지정한 폴더의 시스템 아이콘을 가져오고 싶지만 아이콘을 검색 할 수있는 유일한 방법은 SHGetFileInfo() 메서드를 사용하는 것입니다. SHGetFileInfo() 메서드의 첫 번째 매개 변수는 LPITEMIDLIST의 포인터입니다.폴더의 경로에 따라 LPITEMIDLIST 포인터를 얻는 방법?

폴더의 절대 경로 만있는 경우 어떻게 경로에 따라 포인터를 가져올 수 있습니까?

답변

5

SHParseDisplayName().

멋진 PIDL 세계에 오신 것을 환영합니다.

Introduction to the Shell Namespace에서 자세한 내용을 읽을 수 있지만 기본적으로 PIDL은 항목 ID 목록에 대한 포인터입니다. 인접한 메모리의 연결된 목록으로 생각할 수 있지만 각 노드 대신 다음 노드를 가리키는 포인터 대신 항목에 포함 된 바이트 수인 cb 멤버가 있으므로 추가 할 수 있습니다. 기본 주소는 다음 항목을 가져옵니다. IDL리스트는 {cb = 0, abID = NULL} 항목으로 종료됩니다.

그래서이 마술 창고에는 무엇이 있습니까? 기본적으로 당신은 상관하지 않으며 알 수 없습니다. 모든 IShellFolder 구현은 쉘 네임 스페이스에서 항목 유형을 나타 내기 위해 새로운 유형의 ID를 만들 수 있습니다. 쉘이 구현하는 기본 파일 시스템보기는 경로 목록을이 목록에 저장하므로 다음 항목의 첫 번째 "사용자 \"에는 "c : \"와 같은 내용이 있습니다. 실제로는 일련 화됩니다 더 많은 데이터를 포함 할 수있는 구조체 (또는 클래스). 그러나 프린터, 네트워크 공유, 데이터베이스 검색 (검색 폴더, 스택 등)을 나타낼 수도 있습니다.

IShellFolders에 포함 된 항목을 나타내는 PIDL을 제공하고 나중에 해당 PIDL을 다른 Shell 함수 및 인터페이스에 제공 할 수 있다는 사실을 알아야한다는 사실을 알고 있어야합니다. 어떻게 그들을 다루는가. SHParseDisplayName()이 기본적으로 수행하는 것은 (내가 생각하기에) 등록 된 모든 IShellFolder 구현을 찾는 레지스트리를 통과하고 전달한 문자열로 무엇을해야 하는지를 물어 본 후이를 처리하는 첫 번째 핸들은 PIDL을 만들어 그것을 제공한다. 뒤로.

+0

고마워요! PIDL 개념을 최근 자주 만났습니다. 나에게 설명하는 기사를 추천 해 주시겠습니까? – quantity

관련 문제