X-Finder プログラミング メモ |
|
|
Windows2000/XP1.CoCreateInstance(CLSID_ShellThumbnailDiskCache, NULL, CLSCTX_INPROC, IID_IPersistFolder, ...);ShellThumbnailDiskCacheをIPersistFolderで取得します。 2.IPerststFolder.Initialize(pidlABSOLUTE); IPerststFolderをフォルダ(縮小版を開くファイル/フォルダの親フォルダ)のItemIDListで初期化します。 3.IPersistFolder.QueryInterface(IID_IShellImageStore, ...); IPerststFolder から IShellImageStore を取得します。 4.IShellImageStore.Open(STGM_READ, pdwLock); IShellImageStore を読み込みモードで開きます。 5.IShellImageStore.IsEntryInStore(pszName, pftTimeStamp); ファイル名(pszName)で縮小版キャッシュがあるか確かめます。 ここでキャッシュのタイムスタンプ(pftTimeStamp)が実際のファイルのタイムスタンプより新しいか調べます。 6.IShellImageStore.GetEntry(pszName, STGM_READ, phImage); 縮小版キャッシュを phImage に取得します。 7.IShellImageStore.Close(pdwLock); IShellImageStore を閉じます。 ※1-3まではフォルダを開く際に取得しておいて、4-6でファイル/フォルダごとの縮小版を取得します。 そのフォルダに縮小版キャッシュがあるかは、4で開けるかでチェックできます。 Windows7/Vista1.CoCreateInstance(CLSID_LocalThumbnailCache, NULL, CLSCTX_INPROC, IID_ThumbnailCache, ...);IThumbnailCacheを取得します。 2.SHCreateShellItem(...); SHCreateShellItem で IShellItem を取得します。IShellFolder と pidlCHILD からでも pidlPARENT と pidlCHILD からでも取得できます。 3.IThumbnailCache.GetThumbnail(IShellItem, cxyRequestedThumbSize, WTS_INCACHEONLY, ISharedBitmap, NULL, NULL); cxyRequestedThumbSize のサイズで ISharedBitmap を取得します。 WTS_INCACHEONLYの部分を変えると縮小版がない場合は作成させる事もできます。 4.ISharedBitmap.Detach(...); SharedBitmapから縮小版キャッシュを取得します。 ※1は起動時に1回取得しておいて2-4でファイル/フォルダごと縮小版を取得します。 |