Icon aus Shell32 laden?



  • Hallo,

    gibt es eine Möglichkeit ein Icon aus der Shell32.dll zu laden? Man kann ja mit Hilfe eines Programmes (z.B IrfanView) sich die Icons anschauen, die in der Dll enthalten sind.
    Ich dachte erst an FindResource, aber da muss man ja den Namen der Resource bzw. des Icons wissen...

    freue mich über jeden Tip...Danke

    mfg



  • bool LoadStandardIcon(UINT nID)
    {
        ::HINSTANCE hDll = NULL;
        hDll = ::LoadLibrary(TEXT("shell32.dll"));
    
        if (!hDll)
            return false;
    
        ::HICON hIcon = ::LoadIcon(hDll, MAKEINTRESOURCE(nID));
    
        ::FreeLibrary(hDll);
    
        if (!hIcon)
            return false;
    
        return true;
    }
    

    So in etwa...



  • hallo,

    ja, genau. Nur muss man ja jetzt die nID wissen, um das ensprechende Icon zu laden...um das gehts mir ja, soweit war ich ja auch schon... 😉

    gruß



  • Ja wo ist das Problem dabei? Willst de nen Programm zum anzeigen aller Icons der Dll schreiben? An sonnsten geh mit VC dran und such dir das richtige aus ...



  • hallo,

    nee...das war nur so zum was ausprobieren...aber ich hab jetzt was gefunden.

    trotzdem danke 🙂


  • Mod

    (D)Evil schrieb:

    bool LoadStandardIcon(UINT nID)
    {
     <snip>
        ::FreeLibrary(hDll);
     <snip>
    }
    

    Das geht nicht. Das würde nur gehen wenn shell32.dll bereits im Prozess geladen ist. Wenn der Prozess shell32.dll erst durch diesen Code lädt, würde das Icon nach dem FreeLibrary ungültig werden.

    BTW: Man kann DLLs auch als ressource only laden mit LoadLibraryEx! Aber auch hier ist FreeLibrary nicht erlaubt solange die Ressource benutzt werden soll und nicht kopiert wird...



  • Oh ja sry...

    @Martin:
    Hmm... wenn die Library als Resource Only definiert ist... oder auch so?


  • Mod

    In beiden Fällen, denn ein resource handle ist nichts anderes als ein Zeiger in das Memory Image und das könnte nach FreeLibrary eben nicht mehr vorhanden sein.

    Für Icons empfiehlt es sich einfach ExtractIconEx zu verwenden.


Anmelden zum Antworten