要するに、デバイスとプリンターのコントロール パネル フォルダーで使用されている、拡張された写真のようにリアルなアイコンを探しているということです。
Windowsシェルを使用してそれらを列挙できると思いますが、.NETプロジェクトにリンクされたシェルパックを持っていません.とにかく、それは不正行為だと思います.感謝します)。
シェルの外部でこれらのファイルにアクセスすることに関して私が見つけたまばらなドキュメントのほとんどは、パス「%LOCALAPPDATA%\Microsoft\Device Metadata\dmrccache」に移動することによるものです。
ただし、Windows 8.1 Pro を実行していますが、そのディレクトリは存在しません。「C:\Users\Nathan\AppData\Local\Microsoft\Device Stage\Device\{8616C787-FB4C-4B21-A2FE-D263F0DC4DA5}\en-US」というディレクトリが見つかりました
これには、ブラザー複合機の画像が保持されているようですが、他のデバイス用の同様のフォルダーは見つかりません。言うまでもなく、GUID キー {8616C787-FB4C-4B21-A2FE-D263F0DC4DA5} はレジストリにまったく見つかりません。また、プリンター デバイスに関連付けられているデバイス プロパティにもリンクされていません。また、プリンター デバイスには、デバイス メタデータ ファイルのプロパティ キーがありません (他のすべてのデバイス情報が読み込まれますが、キーは存在しないと言います)。
MSDN を見たところ、独自のデバイス ステージとデバイス展開用の拡張アイコン XML メタデータを作成する方法がすべて説明されていますが、Windows でそれを消化する方法に関するドキュメントはほとんどありません。
私は、ほとんどの SetupDiXXXXXX 関数に精通しており、十分に機能しており、これらの関数をラップする独自の .NET ベースのハードウェア 列挙子とクラスを作成しました。
しかし、現在、私が抱えている問題を扱っているドキュメントは見つかりません。唯一の「クイックフィックス」ソリューションは、デバイスとプリンターファイルのシェル列挙からアイコンを取得することです...
しかし、私はこの問題の内部の仕組みをより深く理解したいと思っており、シェル COM インターフェイスを使用することは、私の最初の解決策ではありません (ただし、シェル C API 関数をかなり使用します。誰かがそれに関連する答えを提供できます、私はすべて耳です)。
また、デバイス ステージ レイヤーが Windows 7 から Windows 8 に何らかの形で変更された理由とその場合、およびこれが文書化されていない理由を知りたいです。
補遺
そのようなディレクトリにファイルが存在する場合でも、ファイル自体の名前を計算して取得する方法を理解できれば、シェルアイコン抽出を使用してもかまいません。
デバイスとプリンターにアクセスするための魔法の名前は次のとおりです。
::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{A8A91A66-3A7D-4424-8D24-04E180695C7A}
エクスプローラーのブラウザー バーに貼り付けると、そこに移動します。そのパスにアタッチする情報を取得できる場合は、シェル C 呼び出しを使用してアイコンを取得できます。
しかし、プリンターのインスタンス ID を試してもうまくいきませんでした (ネットワーク フォルダーで機能します)。
このようなフォルダで可能かどうかさえわかりません。
それでも、自分でこれらのものを見つけに行く方法についてもっと知りたいです。