현재 파일 및 폴더 브라우징 인터페이스를 직접 통합하고자하는 VB.net을 사용하는 Windows 데스크톱 응용 프로그램에서 작업 중입니다. 즉, 사용자가 파일 브라우저 대화 상자를 열어 파일을 선택하지 않아도됩니다.VB.net 또는 Windows API : 파일 탐색기에서 사용하는 아이콘을 찾는 방법은 무엇입니까?
내 파일 브라우저는 가장 일반적인 위치에 대해 동일한 아이콘을 사용한다는 점에서 원래 Windows 파일 탐색기와 유사해야합니다. 예를 들어, "즐겨 찾기"폴더에 적절한 아이콘을 넣고 싶습니다. IE 즐겨 찾기 폴더가 아니라 파일 탐색기의 주소 표시 줄에 shell:links
을 입력하면 나타나는 폴더입니다.
내 문제는 아이콘을 가져 오는 중입니다. 지금까지 Windows API의 일부 기능에 대한 래퍼 클래스, 특히 SHGetKnownFolderPath
및 SHGetFileInfo
을 작성했습니다.
1) Windows 버전 및 현지화)에 따라 각 위치의 전체 경로를 (얻을 SHGetKnownFolderPath
를 사용하여 내 접근 방식은 다음과 같다. 이 부분은 예상대로 작동합니다. 예를 들어, 내 시스템 (W7 Pro x64)에서 SHGetKnownFolderPath
은 각각의 rfid와 함께 질의 될 때 "C : \ Users \ Administrator \ Links"를 반환합니다.
2) 윈도우 (1)에서 얻은 경로)의 기본 아이콘을 고려 아이콘을 가져 오기 위해 SHGetFileInfo
를 사용합니다. 이 부분은 기술적으로 잘 작동하지만 이지만 잘못된 아이콘이 반환됩니다. - Windows 파일 탐색기가 같은 위치에서 사용하는 것보다 다른 아이콘이라는 점에서 잘못되었습니다.
내가 시도하는 네 개의 다른 위치에 (MyLibraries, MyFavorites (링크), 내 컴퓨터, MyNetwork). MyLibraries 아이콘은 예상 된 것이고 나머지 세 파일은 Windows 파일 탐색기에서 사용하는 아이콘과 완전히 다릅니다.
그래서 내가 가진 몇몇 질문 :
1) 특정 폴더, 예를 들어, 표준 Windows 파일 탐색기에서 사용되는 아이콘 감지 할 수있는 방법이 있나요 "즐겨 찾기"(내 컴퓨터의 C : \ Users \ Administrator \ Links)? 일반 솔루션 (즉, 모든 위치에서 사용할 수있는 솔루션 described here)에 관심이 있습니다.
2) 그러한 방법이없는 경우, 내가 Shell32.dll에서 관심의 모든 아이콘의 수 (인덱스)를 발견 할 것이다 (실제로) 순간에 몇 만이있다. 앞으로 이러한 인덱스가 변경되지 않을 것이라 확신 할 수 있습니까?
3) this document에 따르면 SHGetFileInfo
을 사용하기 전에 CoInitialize
으로 전화해야합니다. 나는 .NET 프레임 워크가 자동적으로 주 스레드에 대해 이것을 시작하기 때문에이를 수행하지 않았기 때문에 아직 내 응용 프로그램을 개발하지 않았다는 것을 알았다.
나는 CoInitialize
에 누락 된 호출이 "잘못된"아이콘의 원인이 될 수 없다고 생각합니다. 내가 틀렸다면 알려주세요.
잠재적 인 솔루션은 .NET 언어 또는 기본 Windows API/SDK를 사용하는 것일 수 있습니다. VB.net 내에서 솔루션을 사용하는 방법 (심지어 매우 복잡한 것)이있는 한, 나는 그것에 만족할 것이다.
게시물 당 하나의 질문을해야합니다. – Plutonix
[SHGetStockIconInfo] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb762205(v=vs.85) .aspx)를 참조하십시오. 도움이 될 수 있습니다. –
@KenWhite이 링크는 매우 흥미 롭습니다. 아직 그 기능에 대해 몰랐습니다. 반면에 Windows 파일 탐색기가 해당 목록의 아이콘을 사용한다는 보장은 없으며 목록에 Windows 파일 탐색기에서 사용되는 아이콘 (예 : "즐겨 찾기"아이콘)이 없습니다. 그럼에도 불구하고, 내 문제에 대한 다른 (직접적인) 해결책이 없다면이 아이콘 세트로 전환하는 것을 상상할 수 있습니다. – Binarus