2014-09-20 5 views
0

길지 않아서 장치 및 프린터 제어판 폴더에서 사용되는 향상된 사실적인 아이콘을 찾고 있습니다.장치 스테이지 및 장치 메타 데이터 : 문제 찾기 대답

Windows 셸을 사용하여 열거 할 수 있다고 가정합니다.하지만 셸 패키지가 내 .NET 프로젝트에 연결되어 있지 않습니다. 그런데 부정 행위라고 생각합니다. 어쨌든 (LOL은 너는 하나를 고맙게 생각하지 않을 것이다).

는 "% LOCALAPPDATA % \ 마이크로 소프트 \ 장치 메타 데이터 \ dmrccache"를 제외하고

, 나는 실행하는 Windows를 내가 경로로 이동하여 쉘의 외부에 이러한 파일에 액세스에 대한 발견 한 스파 스 문서의 대부분을 해요 8.1 Pro이고 해당 디렉토리가 존재하지 않습니다. C : \ Users \ Nathan \ AppData \ Local \ Microsoft \ Device Stage \ Device \ {8616C787-FB4C-4B21-A2FE-D263F0DC4DA5} \ en-US "라는 디렉터리를 찾았습니다.

Brother 다기능 프린터의 이미지를 볼 수 있지만 다른 장치에 대해서는 비슷한 폴더를 찾을 수 없습니다. 또한, {8616C787-FB4C-4B21-A2FE-D263F0DC4DA5} GUID 키는 레지스트리에 전혀 없으며 프린터 장치와 관련된 장치 속성에도 링크되어 있지 않습니다. 프린터 장치에는 장치 메타 데이터 파일의 속성 키가 없습니다 (다른 모든 장치 정보가 채워지더라도 키가 존재하지 않는다고 말함).

MSDN에서 살펴본 내용에 대해 설명합니다. OWN 장치 단계를 만들고 장치 배포를 위해 향상된 아이콘 XML 메타 데이터를 만들지 만 Windows에서이를 소화하는 방법에 대한 문서는 거의 없습니다.

저는 대부분의 SetupDiXXXXXX 함수에 대해 잘 알고 있으며 유능한 작업을하고 있으며 .NET 기반 하드웨어 열거 자 및 클래스를 작성했습니다.

하지만 지금 가지고있는 문제를 다루는 문서는 찾을 수 없습니다. 유일한 "빠른 수정"솔루션은 장치 및 프린터 파일의 셸 열거 형에서 아이콘을 가져 오는 것입니다 ...

하지만이 문제의 내부 동작에 대해 더 깊이 이해하고 싶습니다. 셸 COM 인터페이스는 솔루션의 첫 번째 선택이 아닙니다. (그러나 셸 C API 함수로 작업합니다. 그렇다면 누군가가 그와 관련된 대답을 제공 할 수 있습니다. 모든 귀가 있습니다.)

또한 왜 장치 단계 계층이 어떻게 Windows 7에서 Windows 8로 변경되었는지, 그리고이 중 아무 것도 문서화되지 않은 이유를 알고 싶습니다.

부록

조차 존재한다면 나는 그와 같은 디렉토리에, 그것을 계산하여, 파일 자체의 이름을 얻는 방법을 알아낼 수 있다면 쉘 아이콘 추출을 사용하여 상관 없어 .

이 장치 및 프린터에 도착하기 위해, 마법의 이름은 다음과 같습니다
::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{A8A91A66-3A7D-4424-8D24-04E180695C7A} 

당신이 당신의 Explorer 브라우저 표시 줄에, 거기 당신을 데려 갈 것이다 스틱 경우

. 해당 경로에 연결할 정보를 가져올 수 있다면 쉘 C 호출을 사용하여 아이콘을 가져올 수 있습니다.

그러나 프린터의 인스턴스 ID가 작동하지 않습니다 (네트워킹 폴더와 작동 함).

이런 폴더에서 가능할 지 모르겠다.

그래도 나는이 것들을 직접 찾아서 찾는 법에 대해 알고 싶습니다.

답변

0

오케이. 좀 파고 들었고 쉘 인터페이스를 사용하지 않고 장치의 아이콘을 얻을 수 있습니다. 기본 경로의 목적을 위해

\Provider%5CMicrosoft.Base.DevQueryObjects//DDO: 

: 나는 당신이해야 할 모든이 추가되어있는 숙제를

::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{A8A91A66-3A7D-4424-8D24-04E180695C7A} 

: 장치 및 프린터 폴더의 기본 경로 감안할 때

그 다음에 SetupDiXXXX 함수에 의해 검색된 URL 이스케이프 된 버전의 장치 컨테이너 ID가옵니다. 거기에서 사진 사실적인 아이콘을 검색 할 수 있습니다.

나는 그것을 해냈다. 장치의 컨테이너 ID를 찾고이 데이터를 SHParseDisplayName에 전달하면 항목 이미지 목록에서 아이콘을 가져올 수 있습니다.

HOWEVER 기기 스테이지 정보 데이터 소비에 대한 정보를 찾는 것이 왜 그렇게 어려운지 알고 싶습니다. , x64 시스템에 x86 용 컴파일 할 때

는 또한 SHParseDisplayName합니다 ... "매우 특별한"폴더가 제대로 작동하지 않습니다 지금까지 나는 단지 64 용으로 컴파일하여 위의 식에 특별한 사실적인 아이콘을 검색 할 수 있습니다 구체적으로. 실제 x86 시스템으로 가서 비슷한 반응을 보일 것입니다.