Det här är vad jag har, det borde funka... Jag får det att fungera. Det enda sättet jag kan tänka mig är att sökvägen till filen inte stämmer. oppss. Ligger alla ikoner du ska ha ut i systemmappen så kan du med hjälp av API få fram den och bara skicka med utan att användaren behöver se den. jag har fått det att funka nu iaf, jag gjorde så att jag lade med ikonen i databasen... och läste den där ifrån.SHGetFileInfo, vill inte funka, vaföö?
det jag försöker göra är att läsa ur ikonen, sedan lägga in den i Imagelist, sedan använda den i min Treeview...
Felet uppstår här någonstans:
FilePath = "C:\winnt\regedit32.exe"
hImgSmall& = SHGetFileInfo(FilePath, 0&, ShInfo, Len(ShInfo), BASIC_SHGFI_FLAGS Or SHGFI_SMALLICON)
hImgSmall&, är alltid noll, den borde väl får en annan siffra?!?!
----------------------------Module----------------
Public Const MAX_PATH = 260
Public Const SHGFI_DISPLAYNAME = &H200
Public Const SHGFI_EXETYPE = &H2000
Public Const SHGFI_SYSICONINDEX = &H4000 'system icon index
Public Const SHGFI_LARGEICON = &H0 'large icon
Public Const SHGFI_SMALLICON = &H1 'small icon
Public Const SHGFI_SHELLICONSIZE = &H4
Public Const SHGFI_TYPENAME = &H400
Public Const ILD_TRANSPARENT = &H1 'display transparent
Public Const BASIC_SHGFI_FLAGS = SHGFI_TYPENAME Or SHGFI_SHELLICONSIZE Or SHGFI_SYSICONINDEX Or SHGFI_DISPLAYNAME Or SHGFI_EXETYPE
Public Declare Function SHGetFileInfo Lib "Shell32" Alias "SHGetFileInfoA" (ByVal pszPath As String, ByVal dwFileAttributes As Long, psfi As SHFILEINFO, ByVal cbSizeFileInfo As Long, ByVal uFlags As Long) As Long
Public Declare Function ImageList_Draw Lib "comctl32" (ByVal himl As Long, ByVal i As Long, ByVal hDCDest As Long, ByVal X As Long, ByVal y As Long, ByVal flags As Long) As Long
Public ShInfo As SHFILEINFO
Public Type SHFILEINFO
hIcon As Long
iIcon As Long
dwAttributes As Long
szDisplayName As String * MAX_PATH
szTypeName As String * 80
End Type
Public Function ExtractIcon(FilePath As String) As Integer
Dim hImgSmall As Long 'the handle to the system image list
Dim Temp1 As Integer
hImgSmall& = SHGetFileInfo(FilePath, 0&, ShInfo, Len(ShInfo), BASIC_SHGFI_FLAGS Or SHGFI_SMALLICON)
Form1.ImgTmp.Picture = LoadPicture()
Form1.ImgTmp.AutoRedraw = True
'draw the associated icon into the picturebox
Call ImageList_Draw(hImgSmall&, ShInfo.iIcon, Form1.ImgTmp.hdc, 0, 0, ILD_TRANSPARENT)
Form1.ImgTmp.Picture = Form1.ImgTmp.Image
Form1.ImageList1.ListImages.Add (Form1.ImageList1.ListImages.Count + 1), "", Form1.ImgTmp.Picture
Temp1 = Form1.ImageList1.ListImages.Count
ExtractIcon = Temp1
End FunctionSv: SHGetFileInfo, vill inte funka, vaföö?
Jag kör XP och testade med "C:\windows\regedit.exe", gick alledes utmärkt.Sv: SHGetFileInfo, vill inte funka, vaföö?
jag testade ju med c:\winnt\regedit32.exe, såg nu att den inte hette så :)
men nu har jag stött på ett annat prob istället, jag måste kunna skriva bara filnamnet...
tex, Regedit.exe, istållet för: Path & regedit.exe
går det med Shfileop...?Sv: SHGetFileInfo, vill inte funka, vaföö?
<code>
Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Dim s as String * 255
Dim sPath as String
sPath = Left$(s, GetWindowsDirectory(strSave, s)) & "\REGEdit.exe"
</code>
För andra filer i systemet så blir det till att skicka med hela sökvägen.
Det kanske skulle kunna gå om du kan kontrollera vilka program som är installerade på datorn och få fram sökvägen på det sättet.Sv: SHGetFileInfo, vill inte funka, vaföö?
så nu funkar det