A_N_K Skrevet 4. juli 2006 Del Skrevet 4. juli 2006 Kan noen si meg om det er mulig gjennom Win32 API å få tak i ikonene som Explorer bruker for å indikere filtype, for Python-filer for å nevne et eksempel? Har en Qt-widget for å inspisere visse filer, men skulle gjerne hatt noen passende ikoner også. Lenke til kommentar
kjetil7 Skrevet 4. juli 2006 Del Skrevet 4. juli 2006 Ikonene finnes i den såkalte system image list som er en HIMAGELIST med ikonene til hele shellet. Listen henter du ved å bruke SHGetFileInfo som ligger i shell32.dll. For å hente system image list for små ikoner kan du gjøre følgende: HIMAGELIST GetSmallSystemImageList() { SHFILEINFO sfi; HIMAGELIST sysImgList; ZeroMemory(&sfi, sizeof(sfi)); sysImgList = (HIMAGELIST) SHGetFileInfo(TEXT("C:\\"), 0, &sfi, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON); return sysImgList; } Deretter bruker du SHGFI_SYSICONINDEX flagget for å hente ut indeksen fra listen. F.eks slik: SHGetFileInfo(_T("c:\\minfil.py"), FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX); int iconIndex = sfi.iIcon; Du kan også kopiere iconet til sfi.hIcon ved å bruke SHGFI_ICON flagget. Men vanligvis bruker man listen direkte slik at du slipper å kopiere ressursene når man viser filer i f.eks. en listekontroll. SHGetFileInfo har mange muligheter så jeg anbefaler deg å ta en titt på MSDN . Lenke til kommentar
A_N_K Skrevet 4. juli 2006 Forfatter Del Skrevet 4. juli 2006 Ikonene finnes i den såkalte system image list som er en HIMAGELIST med ikonene til hele shellet. Listen henter du ved å bruke SHGetFileInfo som ligger i shell32.dll. For å hente system image list for små ikoner kan du gjøre følgende: HIMAGELIST GetSmallSystemImageList() { SHFILEINFO sfi; HIMAGELIST sysImgList; ZeroMemory(&sfi, sizeof(sfi)); sysImgList = (HIMAGELIST) SHGetFileInfo(TEXT("C:\\"), 0, &sfi, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON); return sysImgList; } Deretter bruker du SHGFI_SYSICONINDEX flagget for å hente ut indeksen fra listen. F.eks slik: SHGetFileInfo(_T("c:\\minfil.py"), FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX); int iconIndex = sfi.iIcon; Du kan også kopiere iconet til sfi.hIcon ved å bruke SHGFI_ICON flagget. Men vanligvis bruker man listen direkte slik at du slipper å kopiere ressursene når man viser filer i f.eks. en listekontroll. SHGetFileInfo har mange muligheter så jeg anbefaler deg å ta en titt på MSDN . 6434610[/snapback] Ikke kommet så langt som til å prøve ennå, men mange takk! Lenke til kommentar
GeirGrusom Skrevet 14. juli 2006 Del Skrevet 14. juli 2006 Konge! dette har jeg lurt på lenge Lenke til kommentar
aklla Skrevet 29. juli 2006 Del Skrevet 29. juli 2006 kan også "enkelt" gjøres med i registry, men hvis dere har funnet en løsning og er fornøyd med den, så tar jeg ikke den nå... Lenke til kommentar
kjetil7 Skrevet 2. august 2006 Del Skrevet 2. august 2006 kan også "enkelt" gjøres med i registry, men hvis dere har funnet en løsning og er fornøyd med den, så tar jeg ikke den nå... 6581702[/snapback] Det er riktig at registeret holder denne informasjonen. SHGetFileInfo og andre funksjoner i Shell API bruker registeret for å hente ut dataene. Men det blir en ganske omfattende jobb å gjøre dette manuelt. Du må lese og tolke opp til flere verdier i registeret + åpne fila og hente ut den ønskede ressursen fra respektiv fil. Det ville være mildt sagt klønete og på grensen til et hack å regne i forhold til det ene API-kallet som er nødvendig. Det er heller ingen garanti for at registeret vil ha dagens struktur og funksjon i fremtidige utgaver av Windows. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå