Problema con pickIconDLG

giovedì 18 marzo 2010 - 20.27

Enzo_LT Profilo | Newbie

Salve, Chiedo aiuto per un problema di icone.

Sto' lavorando su un programma che richiede una specie di desktop personalizzato e ho la necessità di cambiare le icone a dei collegamenti tipo Shortcut, (uso VB2008).
Il problema nasche quando devo estrarre l'icona dal file shell32.dll, allego un pezzo di listato:


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


Dim iconfile As String ' file that contains the desired icon
Dim iconindex As Integer ' index of the desired icon
Dim retval As Int32 ' return value
Dim sb As System.Text.StringBuilder

iconfile = Environment.GetFolderPath(Environment.SpecialFolder.System)
iconfile = iconfile & "\shell32.dll"
iconindex = 2

sb = New System.Text.StringBuilder(iconfile, 500)
retval = PickIconDlg(Me.Handle, sb, sb.Length, iconindex)
iconfile = sb.ToString

If retval <> 0 Then
Dim g As Graphics
Dim ico As Icon
Dim hIcon As IntPtr ' handle to the icon once it is extracted
hIcon = ExtractIcon(Process.GetCurrentProcess().Handle, iconfile, iconindex)

ico = Icon.FromHandle(hIcon) <<----- qui errore: l'handle Win32 passato a icon no è valido o di tipo non corretto
g = Me.CreateGraphics
g.DrawIcon(ico, 0, 0)
g.Dispose()
retval = DestroyIcon(hIcon)
End If


End Sub



in effetti il valore di icon = 0 .

Grazie
Saluti Enzo

***************************
Scusate, risolto.
Erano 2 problemi,
1 legato al percorso, la riga " sb = New System.Text.StringBuilder(iconfile, 500)" mi troncava l'ultima lettera "Shell.dll" era "Shell.dl"
2 Con una diversa dichiarazione (anche se non ho il capito motivo)

prima: Public Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As IntPtr, ByVal lpszExeFileName As String, ByVal nIconIndex As Integer) As Integer

dopo : 'Declare API to extract icon at Class level
<System.Runtime.InteropServices.DllImport("shell32.dll")> Shared Function _
ExtractAssociatedIcon(ByVal hInst As IntPtr, ByVal lpIconPath As String, _
ByRef lpiIcon As Integer) As IntPtr
End Function

cmq risolto Grazie

Saluti Enzo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5