Ich habe eine Anwendung erstellt, die Ihnen eine Liste von Dateien auf Ihrem Computer präsentiert. Wenn Sie auf ein Element in der Liste klicken, sollte eine kleine PictureBox neben der Miniaturansicht der entsprechenden Datei angezeigt werden. Ich verwende C# unter Windows 7.Zugriff auf Thumbnails, die nicht existieren
Um das Thumbnail zu erhalten, habe ich eine Methode in einer anderen Frage wiederholt. Zuerst referenziere ich das Windows API Code Pack. Dann benutze ich den folgenden Code:
ShellFile shellFile = ShellFile.FromFilePath(fullPathToFile);
myPictureBox.Image = shellFile.Thumbnail.LargeBitmap;
Dies funktioniert nicht immer. Manchmal ist das angezeigte Miniaturbild lediglich das Symbol für die Standardanwendung. Ich habe herausgefunden, dass das echte Thumbnail nur angezeigt wird, wenn Windows zuvor das Thumbnail für diese Datei generiert und im Thumbnails-Cache gespeichert hat. Das bedeutet, dass ich einen Ordner manuell öffnen muss, auf Windows warten muss, um Miniaturen für jede Datei zu erstellen, und dann wird meine Anwendung diese Daumen sehen können.
Wie kann mein Programm Windows 7 zwingen, echte Miniaturansichten zu erstellen, bevor Sie sie verwenden?
Update (von Li0liQ)
Es ist möglich, durch Thumbnail-Retrieval zu zwingen FORMAT Zugabe:
ShellFile shellFile = ShellFile.FromFilePath(fullPathToFile);
shellFile.Thumbnail.FormatOption = ShellThumbnailFormatOption.ThumbnailOnly;
myPictureBox.Image = shellFile.Thumbnail.LargeBitmap;
aber ich bin immer eine Ausnahme im Fall Thumbnail noch nicht da ist:
Das aktuelle ShellObject hat keinen gültigen Thumbnail-Handler oder Es gab ein Problem beim Extrahieren des Thumbnails für dieses spezifische Shell-Objekt. ---> System.Runtime.InteropServices.COMException: Klasse nicht registriert (Ausnahme von HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
Siehe How do I refresh a file's thumbnail in Windows Explorer? Frage und Code snippet für mögliche Hinweise.
li0liq, Ihre Fehlermeldung sagt nicht, dass das Thumbnail noch nicht da ist, es heißt, es gibt keinen Handler, um das Thumbnail zu erzeugen. –