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.