2012-11-08 2 views
0

주어진 경로의 폴더에 사용자가 설정 한 일반 폴더 아이콘 또는 사용자 지정 아이콘이 있는지 확인하는 방법은 무엇입니까? Win32 API 호출 만 사용하고 싶습니다.폴더에 사용자 정의 아이콘이 있는지 확인하는 방법은 무엇입니까?

안쪽에 desktop.ini 파일이 있는지 확인할 수 있지만이 방법은 항상 사용할 수있는 것은 아닙니다 (프로그램에서 폴더의 내용을 나열 할 수있는 권한이 없음). 느린 이유는 각 ini 파일을 구문 분석해야하기 때문입니다. 시간 (아이콘은 변경되지 않음).

+0

이 부분의 중요한 점은 무엇입니까? 호의하십시오 SHGetFileInfo() –

+0

전체 파일 시스템 트리를 표시하고 싶기 때문에 어떤 종류의 이미지 목록에 아이콘을 저장해야합니다. 보통 ~ 98 % 폴더에는 일반 폴더 아이콘이 있고 2 % 만 사용자 지정 아이콘을 가지고 있습니다. 그 목록에 수백 또는 수천 개의 동일한 아이콘을 절대적으로 저장해야합니다. – Spook

+0

OS는 고유 한 UI 용도로 시스템 수준의 이미지 목록을 관리합니다. 'SHGetFileInfo()'를 사용하여 그 이미지리스트에 접근하고 그 이미지리스트 내의 파일 시스템 아이템의 인덱스를 얻을 수 있습니다. 간단히'SHGFI_SYSICONINDEX' 플래그를 포함하십시오. –

답변

0

"폴더 내용을 나열 할 필요가 없습니다." 파일의 이름은 항상 desktop.ini입니다. 폴더 경로가 있으면 파일 이름을 파일에 추가하고 파일을 열려고 시도하십시오. 실패 할 경우 GetLastError()은 파일이 없거나 액세스 할 수 없기 때문에 이유를 알려줍니다.

+0

그래,하지만 난 ** 분명히 질문에 명시된 바와 같이, desktop.ini를 구문 분석하여 그것을하고 싶지 않습니다 **! 예를 들어, SHGetFileInfo는 폴더 내용을 나열 할 수있는 권한이 없더라도 유효한 아이콘을 반환합니다 (= 폴더의 파일에 액세스). 이 문제를 해결하기위한 WinAPI의 명확한 방법을 찾고 있습니다. – Spook

+0

방금 ​​질문에 대답했다. 작동한다면'SHGetFileInfo()'를 사용한다. 문제가 무엇입니까? –

+0

나는 C#의 P/Invoke를 사용하여이 작업을 수행합니다. 나는 "빌려준"핸들을 가진 아이콘을 유지하고 싶지 않기 때문에 SHGetFileInfo()를 통해 얻은 후 즉시 복제 한 다음 무료로 만듭니다. 이렇게하면 같은 아이콘도 요청할 때마다 내 목록에 복제되며 이는 정확히 내가 막으려 고하는 것입니다. – Spook

관련 문제