본문 바로가기

망각/Windows Shell

폴더 이름 얻기에 관해 (::SHGetFileInfo, IShellFolder::GetDisplayNameOf)

PIDL로 폴더의 이름을 얻기위해 ::SHGetFileInfo()를 사용중이었는데 "My Documents"나 "My Music" 같은 가상 폴더의 경우, "Administrator's Music" 같은 식으로 윈도우 계정의 이름이 붙어서 리턴됐다.

IShellFolder::GetDisplayNameOf()를 사용하면 "My Music" 처럼 탐색기에 보여지는 이름대로 리턴된다.

한가지 더, ::SHGetFileInfo()의 경우 IDLIST_RELATIVE 같은 부모폴더의 상대적인 PIDL을 전달하면
"C:\"나 "CD Drive (E:)" 같은 "My Computer"에 바로 붙은 노드들은 이름이 빈 문자열로 리턴되는 경우가 있다.
이럴 때 IDLIST_ABSOUTE의 PIDL을 전달해주면 제대로 이름을 얻어온다.

ITEMIDLIST의 타입에 대해선 MSDN을 참고하자.