This commit is contained in:
2019-12-10 15:13:07 +01:00
parent e64ce6543b
commit b6c696ca46
6 changed files with 61 additions and 8 deletions

View File

@@ -0,0 +1,38 @@
Imports System.Drawing
Imports System.Runtime.InteropServices
Imports Pilz.Win32.Native
Namespace Internals
Public Class IconExtractor
''' <summary>
''' Extrahiert das Icon aus einer Datei oder aus einem Ordner.
''' </summary>
''' <param name="FilePath">Hier übergeben Sie den Pfad der Datei von dem das Icon extrahiert werden soll.</param>
''' <param name="Small">Bei übergabe von true wird ein kleines und bei false ein großes Icon zurück gegeben.</param>
Public Shared Function ExtractIcon(ByVal FilePath As String, ByVal Small As Boolean) As Icon
Dim hImgSmall As IntPtr
Dim hImgLarge As IntPtr
Dim shinfo As New SHFILEINFO
If Small Then
hImgSmall = LibShell32.SHGetFileInfo(FilePath, 0, shinfo, CUInt(Math.Truncate(Marshal.SizeOf(shinfo))), SHFILEINFO.SHGFI_ICON Or SHFILEINFO.SHGFI_SMALLICON)
Else
hImgLarge = LibShell32.SHGetFileInfo(FilePath, 0, shinfo, CUInt(Math.Truncate(Marshal.SizeOf(shinfo))), SHFILEINFO.SHGFI_ICON Or SHFILEINFO.SHGFI_LARGEICON)
End If
Dim icon As Icon
Try
icon = Icon.FromHandle(shinfo.hIcon)
Catch ex As Exception
icon = Nothing
End Try
Return icon
End Function
End Class
End Namespace

View File

@@ -3,14 +3,14 @@ Imports Pilz.Win32.Native
Namespace Mapped
Public Class FileInfo
Public Class NativeFileInfo
Public ReadOnly Property Icon As Icon
Public ReadOnly Property SystemIconIndex As Integer
Public ReadOnly Property Displayname As String
Public ReadOnly Property Typename As String
Friend Sub New(info As SHFILEINFO)
Public Sub New(info As SHFILEINFO)
Icon = Icon.FromHandle(info.hIcon)
SystemIconIndex = info.iIcon
Displayname = info.szDisplayName

View File

@@ -0,0 +1,9 @@
Namespace Native
Public Class LibShell32
Public Declare Auto Function SHGetFileInfo Lib "shell32.dll" (ByVal pszPath As String, ByVal dwFileAttributes As UInteger, ByRef psfi As SHFILEINFO, ByVal cbSizeFileInfo As UInteger, ByVal uFlags As UInteger) As IntPtr
End Class
End Namespace

View File

@@ -2,14 +2,21 @@
Namespace Native
Friend Structure SHFILEINFO
<StructLayout(LayoutKind.Sequential)>
Public Structure SHFILEINFO
Public Const SHGFI_ICON As UInteger = &H100
Public Const SHGFI_LARGEICON As UInteger = &H0
Public Const SHGFI_SMALLICON As UInteger = &H1
Public hIcon As IntPtr
Public iIcon As Integer
Public iIcon As IntPtr
Public dwAttributes As UInteger
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)>
Public szDisplayName As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=80)>
Public szTypeName As String
End Structure
End Namespace

View File

@@ -66,7 +66,8 @@
<Import Include="System.Threading.Tasks" />
</ItemGroup>
<ItemGroup>
<Compile Include="Mapped\FileInfo.vb" />
<Compile Include="Internals\IconExtractor.vb" />
<Compile Include="Mapped\NativeFileInfo.vb" />
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
@@ -82,6 +83,7 @@
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<Compile Include="Native\LibShell32.vb" />
<Compile Include="Native\SHFILEINFO.vb" />
</ItemGroup>
<ItemGroup>