2009-03-01 3 views
1

에서 가져옵니다. IconRef가 참조하거나로드 된 .icns 파일을 찾을 수있는 방법이 있습니까? 또는 포함 된 번들의 ID가 하나라도 있다면?IconRef 파일은

모든 아이콘이 파일 (예 : 합성 아이콘)에서 직접로드되는 것은 아니므로 항상 작동하지는 않습니다.

내가 대답하려고하는 질문은 "Finder가 파일 X에 표시 할 아이콘은 어디에서 유래 되었습니까?"입니다. 필자는 아이콘의 이미지 데이터가 아닌 파일 시스템의 아이콘 원점에 관심이 있습니다. 내가 말할 수있는 한, 파일 경로에서 아이콘으로가는 작업 - 예. GetIconRefFromFileInfo 및 NSWorkspace.iconForFile - 상당히 불투명합니다.

필자는 문서화되지 않은/개인용 솔루션에 대해 알고 있습니다.

@millenomi : 예, 애플의 아이콘을 피하는 것이 연습의 요점입니다.

답변

0

일단로드되면 시스템은 아이콘이 생성 된 아이콘 파일에 대한 참조를 유지하지 않기 때문입니다.

*.icns 개의 파일을 /System 번으로 검색하는 것이 가장 좋습니다. 이러한 아이콘은 Apple의 저작권에 의거하며, API를 통해로드 할 때를 제외하고는 재사용해서는 안됩니다.

1

Launch Services에는 번들 등록 데이터베이스를 탐색하는 데 사용할 수있는 개인 API가 있으며 이러한 방식으로 .icns 파일을 찾을 수 있습니다. LaunchServices.framework/Support의 lsregister 도구를 사용하여이 정보를 볼 수 있습니다. lsregister -dump를 사용하여 전체 데이터베이스를보십시오.

필수 UndocumentedGoodness 경고 :이 기능을 사용하면 앱이 조만간 끊어집니다. (그리고 lsregister -dump의 결과물을 파싱하는 것은 훨씬 더 나쁜 생각입니다!)

또한이 사실을 알고있는 것처럼 보이지만 어쨌든 지적하고 싶습니다. 모든 아이콘이 .icns 파일에서 나오는 것은 아닙니다. 일부는 이전 스타일의 Carbon 응용 프로그램과 같이 리소스 파일에 있습니다. 또 다른 경우는 ID -16455의 하나 이상의 자원 인 사용자 정의 (Finder의 정보 창에 붙여 넣기) 아이콘입니다. (클래식 아이콘은 'icl8', 'ics8'등 여러 유형의 리소스에 있지만 현대 아이콘은 'icns'유형의 단일 리소스에 있습니다.)

불행히도이 개인용 API는 사용하지 않았습니다. , 그래서 나는 더 구체적 일 수 없다. 자신을 응답

+0

옛날 옛적에 UndocumentedGoodness 함수'_LSCopyAllApplicationURLs (& urls)'가있었습니다.이것은 사라진 것으로 보인다. 아무도 그게 어디 갔는지 알아? –

0

...

다음은 원래의 질문을 달성하지 않습니다 다음 -하지만 파일 고유의 아이콘을 포기하지 않고 애플 소유의 아이콘을 피할 수있는 내 목표를 달성하지 - IconRef 뒤에있는 파일을 찾는 전부.

트릭은 어떤 응용 프로그램이 파일을 열고 해당 응용 프로그램에서 파일 아이콘을 제공한다고 가정합니다.

LSGetApplicationForItem을 사용하여 파일을 여는 데 사용할 응용 프로그램을 찾습니다. Apple 응용 프로그램 (번들 ID 확인)이 아니라면 파일 아이콘 (GetIconRefFromFileInfo에서 반환)을 사용하는 것이 안전하다고 가정합니다.

문서 및 음악과 같은 "특수"폴더뿐만 아니라 일반 문서, 폴더, 응용 프로그램 및 번들 아이콘을 피할 필요가있는 몇 가지 특별한 경우가 있습니다.