Jæja, þar sem klasinn okkar getur nú sótt icon frá library, þá er kominn tími ti að útfæra fall sem finnur icon eftir skáarnafni. Í fyrri greininni talaði ég um hvernig við finnum þetta icon, þannig að við vindum okkur beint í kóðun núna.
Við bætum við einu falli:
public Icon LoadIconByFileExt(string sFileExt)
{
// Fyrst þurfum við að finna endinguna á skránni
int lastp = sFileExt.LastIndexOf(“.”);
if (lastp >= 0) sFileExt = sFileExt.Substring(lastp);
// Þá stöndum við eftir með eingöngu endinguna.
// Þannig að tími er kominn til að kíkja í registry-ið
RegistryKey rkRoot = Registry.ClassesRoot.OpenSubKey(sFileExt);
// Ef rkRoot er núna null, þá þekkir windows ekki endinguna
// því skilum við til baka DefaultUnknownIcon
if (rkRoot == null) return DefaultUnknownIcon();
// Annars lesum við gerð skáarinnar
string sFileType = rkRoot.GetValue(“”).ToString();
rkRoot = Registry.ClassesRoot.OpenSubKey(sFileType + “\\DefaultIcon”);
// Ef þessi skáargerð finnst ekki, þá skila DefaultUnknownIcon
if (rkRoot == null) return DefaultUnknownIcon();
// Annars sækja staðsetningu iconsins
sFileType = rkRoot.GetValue(“”).ToString();
// Nú þurfum við athuga hvort skráargerð sé = “%1”, ef svo
// er skilum við til baka icon-i sem windows notar fyrir
// óþekktar exe skrár.
if (sFileType == “%1”) return LoadIconFromLibrary(_shell32Location, -3);
// Annars finnum við út icon index-inn, sem er eftir kommuna
int iIconNumber = 0;
lastp = sFileType.LastIndexOf(“,”);
if (lastp > 0)
{
iIconNumber = int.Parse(sFileType.Substring(lastp + 1).Trim());
sFileType = sFileType.Substring(0, lastp).Trim();
}
// Svo köllum við í LoadIconFromLibrary sem sér um að sækja iconið.
return LoadIconFromFromLibrary(sFileType, iIconNumber);
}
Þá er það komið. Í þessu falli gerum við ekkert merkilegt, við sækjum upplýsingar í registry-ið, og köllum svo í LoadIconFromLibrary fallið okkar. Það eina sem mér dettur í hug að minnast á er að þegar við viljum iconið sem windows notar fyrir óþekktar exe skrár, þá notum við gildið -3 fyrir icon indexið. Ástæðan fyrir þessu er sú, að resource-ar í library-um geta verið annað en icon. Neikvæðar tölur í þessum parameter í ExtractIconEx fallinu gefa til kynna resource id, en jákvæðar tölur er númerið á icon-um.
Einnig get ég bent á að það er ekki mikið error checking í þessum kóða, enda ákvað ég að vera ekki að hella slíkum kóða yfir ykkur, þannig að það er á ykkar ábyrgð að útfæra það.
Hugmyndir um breytingar eru til dæmis að bæta við falli sem sækir öll icon frá library, búa til constanta fyrir index á helstu icon sem windows notar, eins og folder iconin, hörðu diska iconin og svo framvegis. En það gerið þið sjálf ef þið hafið áhuga fyrir.
Höfundur ber enga ábyrgð á undanförnum kóða, né viðbrögðum huga við greininni.