Wie speichere ich in VB.NET 2003 ein mit SHGetFileInfo extrahiertes Icon unter einem anderen Namen?

Antwort

Um ein mit `SHGetFileInfo` extrahiertes Icon in VB.NET 2003 unter einem anderen Namen zu speichern, gehst du wie folgt vor: 1. **Icon extrahieren:** Mit `SHGetFileInfo` erhältst du einen Handle auf das Icon (`hIcon`). 2. **Icon-Objekt erstellen:** Erzeuge daraus ein .NET-`Icon`-Objekt. 3. **Icon speichern:** Speichere das Icon mit der gewünschten Methode und unter dem gewünschten Namen. Hier ein Beispielcode: ```vb.net Imports System.Runtime.InteropServices Imports System.Drawing Imports System.IO Public Class IconExtractor <StructLayout(LayoutKind.Sequential)> Public Structure SHFILEINFO Public hIcon As IntPtr Public iIcon As Integer Public dwAttributes As Integer <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> Public szDisplayName As String <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=80)> Public szTypeName As String End Structure <DllImport("shell32.dll")> Public Shared Function SHGetFileInfo( _ ByVal pszPath As String, _ ByVal dwFileAttributes As Integer, _ ByRef psfi As SHFILEINFO, _ ByVal cbFileInfo As Integer, _ ByVal uFlags As Integer) As IntPtr End Function <DllImport("user32.dll", SetLastError:=True)> Public Shared Function DestroyIcon(ByVal hIcon As IntPtr) As Boolean End Function Public Const SHGFI_ICON As Integer = &H100 Public Const SHGFI_LARGEICON As Integer = &H0 ' 32x32 Public Const SHGFI_SMALLICON As Integer = &H1 ' 16x16 Public Shared Sub SaveIcon(ByVal filePath As String, ByVal saveAs As String) Dim shinfo As New SHFILEINFO() Dim hImg As IntPtr = SHGetFileInfo(filePath, 0, shinfo, Marshal.SizeOf(shinfo), SHGFI_ICON Or SHGFI_LARGEICON) If shinfo.hIcon <> IntPtr.Zero Then Dim icon As Icon = Icon.FromHandle(shinfo.hIcon) Using fs As New FileStream(saveAs, FileMode.Create) icon.Save(fs) End Using DestroyIcon(shinfo.hIcon) End If End Sub End Class ``` **Verwendung:** ```vb.net IconExtractor.SaveIcon("C:\Windows\notepad.exe", "C:\Temp\notepad_icon.ico") ``` **Hinweise:** - Der Code speichert das extrahierte Icon als `.ico`-Datei unter dem gewünschten Namen. - Achte darauf, den Icon-Handle nach der Verwendung mit `DestroyIcon` freizugeben, um Speicherlecks zu vermeiden. Weitere Infos zu [SHGetFileInfo (Microsoft Doku)](https://learn.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shgetfileinfoa).

Frage stellen und sofort Antwort erhalten

Verwandte Fragen

Wie lade ich mit VB.NET 2003 ein Icon als Image in eine PictureBox?

Um in VB.NET 2003 ein Icon (.ico-Datei) in eine PictureBox als Image anzuzeigen, musst du das Icon zunächst in ein Bitmap-Objekt umwandeln, da die PictureBox kein Icon direkt anzeigen kann, sonde... [mehr]

Wie speichere ich in VB.NET 2003 ein vorhandenes Icon (*.ico) als PNG-Bild?

In VB.NET 2003 kannst du ein vorhandenes Icon (*.ico) als PNG-Bild speichern, indem du das Icon in ein Bitmap-Objekt konvertierst und dieses dann als PNG exportierst. Die .NET Framework-Version von 20... [mehr]

Wie kann ein in eine PictureBox geladenes Icon mit VB.NET 2003 wieder als Icon gespeichert werden?

Um ein in eine `PictureBox` geladene Icon-Datei in VB.NET 2003 wieder als `.ico`-Datei zu speichern, musst du beachten, dass die `PictureBox.Image`-Eigenschaft ein `Image`-Objekt ist. Das direkte Spei... [mehr]

Wie lädt man in VB.NET 2003 ein Icon in eine PictureBox?

In VB.NET 2003 kannst du ein Icon in eine PictureBox laden, indem du das Icon zuerst in ein Bitmap-Objekt umwandelst, da die PictureBox kein Icon-Objekt direkt anzeigen kann. Hier ein Beispiel: ```vb... [mehr]

Wie ändere ich in VB.NET 2003 nachträglich das Icon eines bestimmten TreeNode?

Um in VB.NET 2003 nachträglich das Icon (genauer: das Image) eines bestimmten TreeNode in einem TreeView zu ändern, gehst du wie folgt vor: 1. **Stelle sicher, dass dein TreeView eine Image... [mehr]

Welchen Einfluss haben überflüssig importierte Klassen mittels Imports in VB.NET 2003 auf ein Programm?

In VB.NET 2003 (also .NET Framework 1.1) hat das Hinzufügen von Imports-Anweisungen für nicht verwendete Namespaces oder Klassen in der Regel **keinen nennenswerten Einfluss auf die Grö... [mehr]

Können in VB.NET 2003 außer Icons auch GIF/PNG für ownerdrawn Contextmenüs verwendet werden?

In **VB.NET 2003** (also .NET Framework 1.1) ist die Unterstützung für Bilder in Menüs standardmäßig auf **Icons** (also `.ico`-Dateien) beschränkt. Das betrifft sowohl... [mehr]

"if shinfo.hicon <> IntPtr.Zero Then ..." verursacht in VB.NET 2003 einen Fehler?

Ja, in **VB.NET 2003** kann folgender Vergleich zu einem Fehler führen: ```vb If shinfo.hIcon <> IntPtr.Zero Then ' ... End If ``` **Grund:** In VB.NET 2003 (also .NET Framewor... [mehr]

Wie kann ich in VB.NET 2003 den Fehler 'Der Vorgang "read" konnte nicht auf dem Speicher...' abfangen?

Der Fehler „Der Vorgang 'read' konnte nicht auf dem Speicher...“ ist kein typischer .NET-Fehler, sondern ein Zugriffsverletzungsfehler (Access Violation), der meist auftritt, wen... [mehr]

Wie kann ich in VB.NET 2003 einem Contextmenü Icons hinzufügen?

In **VB.NET 2003** (Visual Studio .NET 2003) gibt es für das Standard-`ContextMenu`-Steuerelement keine direkte Unterstützung für Icons neben den Menüeinträgen. Das Hinzuf&uum... [mehr]