propsys.dllにWINDOWSPROPERTYDESCRIPTIONSリソースがあります。このリソースは、すべてのシステム・プロップを記述します。いくつかのプロパティは、IconListと等しいdrawcontrolを持っています。例:
<propertyDescription name="System.StorageProviderUIStatus" formatID="{E77E90DF-6271-4F5B-834F-2DD1F245DDA4}" propID="2">
<searchInfo reIndexPatterns="" processReIndexPatternsImmediately="true" inInvertedIndex="false" isColumn="false">
</searchInfo>
<typeInfo type="Blob" isInnate="true" isViewable="true">
</typeInfo>
<labelInfo label="@propsys.dll,-42289">
</labelInfo>
<displayInfo defaultColumnWidth="10">
<drawControl control="IconList">
</drawControl>
</displayInfo>
</propertyDescription>
このようなすべての小道具は、すべて「Blob」に等しいタイプです。だからブロブは答えです。
更新
私の小さな調査。
アイコンを表示する唯一の既知の(私による)ハンドラはOneDriveです。スクリーンショット:
![enter image description here](https://i.stack.imgur.com/PpL19.png)
私はシステムの値を得ました。OneDriveファイルのStorageProviderUIStatusプロパティ。バリュー・ダンプ:
![enter image description here](https://i.stack.imgur.com/1blVh.png)
見ての通り、これは画像やアイコンではありません。これは[MS-PROPSTORE]で説明されているプロパティストアバイナリファイルです。デコード形式:
System.PropList.StatusIcons = prop:System.StorageProviderState;System.StorageProviderCustomStates
System.PropList.StatusIconsDisplayFlag = 3
StorageProviderState = 2
StorageProviderCustomStates = (binary data)
埋め込みプロパティストアバイナリファイルのバイナリデータ。そのデコードされた形式:
StorageProviderFullyQualifiedId = OneDrive!S-1-5-21-782054983-1121033576-3753986437-1001!Personal|79D9464945C2A3B2!331
シンプルなアイコンの説明はすべて非常に困難です。そして、多分私は間違っているかもしれないし、ブロブのタイプは唯一の答えではありません。 propdescファイルの
SOLUTION
内容:
<propertyDescription name="DummyUIState" formatID="{8A560909-320E-4E6A-A6C4-A95C50B77084}" propID="5001">
<searchInfo columnIndexType="NotIndexed"/>
<labelInfo label="DummyUIState"/>
<typeInfo type="Blob" isInnate="true" isViewable="true"/>
<displayInfo defaultColumnWidth="10">
<drawControl control="IconList"/>
</displayInfo>
</propertyDescription>
<propertyDescription name="DummyState" formatID="{8A560909-320E-4E6A-A6C4-A95C50B77084}" propID="5000">
<searchInfo columnIndexType="NotIndexed"/>
<labelInfo label="DummyState"/>
<typeInfo type="UInt32" isInnate="true" isViewable="true"/>
<displayInfo displayType="Enumerated">
<enumeratedList>
<enum name="None" value="0" text="@propsys.dll,-42290"/>
<enum name="Sparse" value="1" text="@propsys.dll,-42291">
<image res="%systemroot%\system32\imageres.dll,-1404"/>
</enum>
<enum name="InSync" value="2" text="@propsys.dll,-42292">
<image res="%systemroot%\system32\imageres.dll,-1400"/>
</enum>
<enum name="Pinned" value="3" text="@propsys.dll,-42293">
<image res="%systemroot%\system32\imageres.dll,-1405"/>
</enum>
<enum name="PendingUpload" value="4" text="@propsys.dll,-42294">
<image res="%systemroot%\system32\imageres.dll,-1401"/>
</enum>
<enum name="PendingDownload" value="5" text="@propsys.dll,-42303">
<image res="%systemroot%\system32\imageres.dll,-1401"/>
</enum>
<enum name="Transferring" value="6" text="@propsys.dll,-42296">
<image res="%systemroot%\system32\imageres.dll,-1401"/>
</enum>
<enum name="Error" value="7" text="@propsys.dll,-42315">
<image res="%systemroot%\system32\imageres.dll,-1402"/>
</enum>
<enum name="Warning" value="8" text="@propsys.dll,-42316">
<image res="%systemroot%\system32\imageres.dll,-1403"/>
</enum>
<enum name="Excluded" value="9" text="@propsys.dll,-42319"/>
<enum name="Pending" value="10" text="@propsys.dll,-42324">
<image res="%systemroot%\system32\imageres.dll,-1401"/>
</enum>
</enumeratedList>
</displayInfo>
</propertyDescription>
するときは、プロパティストアバイナリファイルとBLOBを作成する必要がありますDummyUIStateシェル要求。
- キーSystem.PropList.StatusIcons、小道具に等しい型VT_LPWSTRと値:DummyState
- キーSystem.PropList.StatusIconsDisplayFlag、2に等しいタイプのVT_UI4を持つ値(プロパティストアバイナリファイルには以下のデータが含まれている必要があります2 - アイコンのみ、1 - アイコン+テキスト)
- キーDummyState、値タイプVT_UI4。この値はアイコンを定義します。
それだけです。 Windowsの10のスクリーンショットでテスト:
![enter image description here](https://i.stack.imgur.com/EGk8n.png)
どうもありがとう、ブロブは間違いなく正しいです。私は 'pPropVar-> blob.pBlobData'を予期されたデータ(画像)形式に設定しています。私は 'HBITMAP'をデータ自体として試しました。これは、' GetDIBits() 'によってビットマップから抽出されたバイト配列と、BMP、PNG、ICOファイルのファイル内容のバイト配列です。残念ながら、アイコンの列はこれらのすべての組み合わせで空白のままです。 –
非常に興味深く神秘的です。 'propsys.dll'のリソースに関するヒントは' System.OfflineStatus'のようなプロパティにつながります。 'enumeratedList>の' displayType = "Enumerated"と ''には、DLL内のイメージリソースを参照する ''タグが含まれています。これは完全に合理的な音と私はそのようなプロパティを構築したが、残念ながら画像は表示されません。代わりに、列には ''タグでも指定されているテキストリソースが表示されます。ここでは、Blobパスをさらに追跡して、Property Store Binary Fileの形式を理解しようとします。 –
実際には、今までWindowsエクスプローラの列には、ファイルアイコン以外のアプリケーションは表示されませんでした。 OneDriveでも私のシステムにはアイコンのプロパティはありません。アイコンプロパティを実装することは不可能かもしれないと私は思う。あなたの調査のために大変ありがとう! –