Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Classe

6 réponses
Avatar
FAB
J'ai trouver une classe qui permet de récupérer l'icone des répertoires, ou
fichier tel qu'ils apparaisse dans l'explorer.

Mon problème est que je parviens pas à l'utiliser, afin de définir l'icone
associér à mon noeud dans un treeview.

je joins ci-dessous la classe.

Merci par avance

Imports System.IO
Imports Microsoft.Win32
Imports System
Imports System.Drawing
Imports System.Runtime.InteropServices

Public Class AdvancedFileSysInfo
Inherits System.IO.FileSystemInfo
' Enumération des valeurs dispo pour le paramètre flag de SHGetFileInfo
<Flags()> Private Enum SHGFI
SmallIcon = &H1
LargeIcon = &H0
Icon = &H100
DisplayName = &H200
Typename = &H400
SysIconIndex = &H4000
UseFileAttributes = &H10
End Enum
Public Enum IconType
SmallIcon = CInt(True)
LargeIcon = CInt(False)
End Enum
' Structure contenant les informations sur un objet du filesystem
<StructLayout(LayoutKind.Sequential)> _
Private Structure SHFILEINFO
Public hIcon As IntPtr
Public iIcon As Integer
Public dwAttributes As Integer
<MarshalAs(UnmanagedType.LPStr, SizeConst:=260)> _
Public szDisplayName As String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=80)> _
Public szTypeName As String
Public Sub New(ByVal B As Boolean)
hIcon = IntPtr.Zero
iIcon = 0
dwAttributes = 0
szDisplayName = vbNullString
szTypeName = vbNullString
End Sub
End Structure
' Permet de retourver les informations sur un fichier, un répertoire, un
disque
Private Declare Auto Function SHGetFileInfo Lib "shell32" ( _
ByVal pszPath As String, ByVal dwFileAttributes As Integer, _
ByRef psfi As SHFILEINFO, ByVal cbFileInfo As Integer, ByVal uFlagsn As
SHGFI) As Integer

Public Overrides ReadOnly Property Name() As String
Get
Dim Info As New FileInfo(Me.OriginalPath)
Name = Info.Name
Info = Nothing
End Get
End Property
Public Overrides Sub Delete()
Dim Info As New FileInfo(Me.OriginalPath)
Info.Delete()
Info = Nothing
End Sub
Public Overrides ReadOnly Property Exists() As Boolean
Get
Dim Info As New FileInfo(Me.OriginalPath)
Exists = Info.Exists
Info = Nothing
End Get
End Property
' Cette propriété retourne un icone, celui affiché dans l'explorer
Public ReadOnly Property AssociatedIcon(ByVal IconSize As
AdvancedFileSysInfo.IconType, Optional ByVal MustExist As Boolean = True) As
Icon
Get
If MustExist Then
If Me.Exists Then
AssociatedIcon = GetIcons(Me.OriginalPath, IconSize)
Else
AssociatedIcon = Nothing
End If
Else
AssociatedIcon = GetIcons(Me.OriginalPath, IconSize)
End If
End Get
End Property

' Permet de récupérer l'icone du fichier tel qu'il apparait dans l'explorer
Private Function GetIcons(ByVal Path As String, Optional ByVal Ico As
IconType = CType(True, IconType)) As Icon
Dim info As New SHFILEINFO(True)
Dim cbSizeInfo As Integer = Marshal.SizeOf(info)
Dim flags As SHGFI = SHGFI.Icon Or SHGFI.UseFileAttributes
If Ico = CInt(True) Then
flags = CType(flags + SHGFI.SmallIcon, Global.FRS.AdvancedFileSysInfo.SHGFI)
Else
flags = CType(flags + SHGFI.LargeIcon, Global.FRS.AdvancedFileSysInfo.SHGFI)
End If
SHGetFileInfo(Path, 256, info, cbSizeInfo, flags)
Return Icon.FromHandle(info.hIcon)
End Function
Private Function ExtractDefaultIcon() As String

Dim HKROOT As Registry
Dim hsubKey As RegistryKey
Dim sApplication As String
ExtractDefaultIcon = ""
hsubKey = Registry.ClassesRoot.OpenSubKey(Me.Extension)
If Not hsubKey Is Nothing Then
sApplication = CStr(hsubKey.GetValue(""))
hsubKey.Close()
hsubKey = Registry.ClassesRoot.OpenSubKey(sApplication & "\DefaultIcon")
If Not hsubKey Is Nothing Then
ExtractDefaultIcon = CStr(hsubKey.GetValue(""))
hsubKey.Close()
End If
End If
hsubKey = Nothing
HKROOT = Nothing
End Function
Public Sub New(ByVal FileName As String)
Me.OriginalPath = FileName
End Sub
End Class

6 réponses

Avatar
Fred
Dans : news:ezvX0$,
FAB disait :

J'ai trouver une classe qui permet de récupérer l'icone des
répertoires, ou fichier tel qu'ils apparaisse dans l'explorer.

Mon problème est que je parviens pas à l'utiliser, afin de définir
l'icone associér à mon noeud dans un treeview.



Dim f As New AdvancedFileSysInfo("C:WINDOWSExplorer.exe")
Me.Button1.Image =
f.AssociatedIcon(AdvancedFileSysInfo.IconType.SmallIcon).ToBitmap


--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
FAB
Merci pour la réponse, je n'avais pas etait si mauvais mais il s'avére que
cela ne fonctionne pas avec les répertoires.
il me mets une exeptions que je n'ai pas gérer et qui par consequents
intérromp le programme.

Mon but est pouvoir obtenir les icônes des répertoires spéciaux de windows
comme dans l'explorateur (mes documents, ma musique, etc...)

merci d'avance.

fab

"Fred" a écrit dans le message de
news:
Dans : news:ezvX0$,
FAB disait :

> J'ai trouver une classe qui permet de récupérer l'icone des
> répertoires, ou fichier tel qu'ils apparaisse dans l'explorer.
>
> Mon problème est que je parviens pas à l'utiliser, afin de définir
> l'icone associér à mon noeud dans un treeview.

Dim f As New AdvancedFileSysInfo("C:WINDOWSExplorer.exe")
Me.Button1.Image > f.AssociatedIcon(AdvancedFileSysInfo.IconType.SmallIcon).ToBitmap


--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)



Avatar
Fred
Dans : news:OW2Us$,
FAB disait :

Merci pour la réponse, je n'avais pas etait si mauvais mais il
s'avére que cela ne fonctionne pas avec les répertoires.



Vu le code de la classe, ce n'est pas vraiment étonnant.
Elle est décrite comme pouvant fonctionner avec des répertoires ?

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
FAB
Ben oui, c'est la le plus étonnant.

Quelqu'un aurait une solution à mon problème ?

Fab

"Fred" a écrit dans le message de
news:u$
Dans : news:OW2Us$,
FAB disait :

> Merci pour la réponse, je n'avais pas etait si mauvais mais il
> s'avére que cela ne fonctionne pas avec les répertoires.

Vu le code de la classe, ce n'est pas vraiment étonnant.
Elle est décrite comme pouvant fonctionner avec des répertoires ?

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)



Avatar
Fred
Dans : news:,
FAB disait :


Quelqu'un aurait une solution à mon problème ?



Lorsque des icônes de dossier sont personnalisées (attention : sous XP
uniquement), il se crée un fichier système caché desktop.ini dans le
dossier.
Il contient quelque chose de ce genre :

[.ShellClassInfo]
IconFile=%SystemRoot%system32SHELL32.dll
IconIndex2

Je ne vois pas de solution qui ne passerait pas par l'examen de ce
fichier et l'extraction de l'icône à partir du fichier et de l'index
spécifié.
Je n'ai jamais essayé d'extraire une icone d'un fichier donc je ne
pourrai t'en dire plus.

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
FAB
Mreci fred je vais essayer d'exploiter cette possibilité.

FAB


"Fred" a écrit dans le message de
news:%
Dans : news:,
FAB disait :


> Quelqu'un aurait une solution à mon problème ?

Lorsque des icônes de dossier sont personnalisées (attention : sous XP
uniquement), il se crée un fichier système caché desktop.ini dans le
dossier.
Il contient quelque chose de ce genre :

[.ShellClassInfo]
IconFile=%SystemRoot%system32SHELL32.dll
IconIndex2

Je ne vois pas de solution qui ne passerait pas par l'examen de ce
fichier et l'extraction de l'icône à partir du fichier et de l'index
spécifié.
Je n'ai jamais essayé d'extraire une icone d'un fichier donc je ne
pourrai t'en dire plus.

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)