コンピューター内のファイルのリストを表示するアプリケーションを作成しました。リスト内の項目をクリックすると、その横にある小さな PictureBox に対応するファイルのサムネイルが表示されます。Windows 7 で C# を使用しています。
サムネイルを取得するために、別の質問に投稿された方法を繰り返しました。まず、Windows API コード パックを参照します。次に、次のコードを使用します。
ShellFile shellFile = ShellFile.FromFilePath(fullPathToFile);
myPictureBox.Image = shellFile.Thumbnail.LargeBitmap;
これは常に機能するとは限りません。表示されるサムネイルが単に「既定のアプリケーション」アイコンである場合があります。実際のサムネイルは、Windows が以前にそのファイルのサムネイルを生成してサムネイル キャッシュに保存した場合にのみ表示されることがわかりました。これは、フォルダーを手動で開き、Windows が各ファイルのサムネイルを生成するのを待つ必要があることを意味します。その後、アプリケーションはそれらのサムネイルを表示できるようになります。
Windows 7 で使用する前に実際のサムネイルを生成するようプログラムに強制するにはどうすればよいですか?
アップデート (by Li0liQ)
FormatOption を追加することで、サムネイルの取得を強制することができます。
ShellFile shellFile = ShellFile.FromFilePath(fullPathToFile);
shellFile.Thumbnail.FormatOption = ShellThumbnailFormatOption.ThumbnailOnly;
myPictureBox.Image = shellFile.Thumbnail.LargeBitmap;
ただし、サムネイルがまだない場合は例外が発生します。
現在の ShellObject に有効なサムネイル ハンドラがないか、この特定のシェル オブジェクトのサムネイルの抽出中に問題が発生しました。---> System.Runtime.InteropServices.COMException: クラスが登録されていません (HRESULT からの例外: 0x80040154 (REGDB_E_CLASSNOTREG))
Windows エクスプローラーでファイルのサムネイルを更新するにはどうすればよいですか? を参照してください。潜在的な手がかりの質問とコードスニペット。