il s'agit d'API by number c'est à dire très peu documentés voir pas du tout et pas facile à faire marcher.
Const MAX_PATH = 260
Const DI_MASK = &H1
Const DI_IMAGE = &H2
Const DI_NORMAL = &H3
Const DI_COMPAT = &H4
Const DI_DEFAULTSIZE = &H8
Private Declare Function SHChangeIconDialog Lib "shell32" Alias "#62" (ByVal owner As Long, ByVal pszFileName As String, pdwBufferSize As Long, pdwIndex As Long) As Boolean
Private Declare Function ExtractIconEx Lib "shell32.dll" Alias "ExtractIconExA" (ByVal lpszFile As String, ByVal nIconIndex As Long, phiconLarge As Long, phiconSmall As Long, ByVal nIcons As Long) As Long
Private Declare Function DrawIconEx Lib "user32" (ByVal hdc As Long, ByVal xLeft As Long, ByVal yTop As Long, ByVal hIcon As Long, ByVal cxWidth As Long, ByVal cyWidth As Long, ByVal istepIfAniCur As Long, ByVal hbrFlickerFreeDraw As Long, ByVal diFlags As Long) As Long
Private Declare Function DestroyIcon Lib "user32" (ByVal hIcon As Long) As Long
Private Sub Command1_Click()
Dim sFileName As String
Dim IconPath As String
Dim nIconIdx As Long
Dim hSmallIcon As Long
Dim hLargeIcon As Long
' sFileName = "%SystemRoot%\system32\MORICONS.dll"
sFileName = "" 'SHELL32.dll par défaut
sFileName = sFileName & String$(MAX_PATH - Len(sFileName), 0)
'conversion en Unicode
sFileName = StrConv(sFileName, vbUnicode)
nIconIdx = 0
If SHChangeIconDialog(Me.hWnd, sFileName, 0, nIconIdx) Then
IconPath = StrConv(sFileName, vbFromUnicode)
If InStr(IconPath, vbNullChar) Then
IconPath = Left$(IconPath, InStr(IconPath, vbNullChar) - 1)
End If
If ExtractIconEx(IconPath, nIconIdx, hLargeIcon, hSmallIcon, 1) > 0 Then
DrawIconEx Me.hdc, 0, 8, hSmallIcon, 0, 0, 0, 0, DI_NORMAL
DrawIconEx Me.hdc, 32, 0, hLargeIcon, 0, 0, 0, 0, DI_NORMAL
DestroyIcon hSmallIcon
DestroyIcon hLargeIcon
End If
End If
End Sub
Daniel