Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. How to get en exe default icon

How to get en exe default icon

Scheduled Pinned Locked Moved C / C++ / MFC
tutorialquestion
26 Posts 7 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • N Nisamudheen

    Try http://codeproject.com/win32/IconExtraction.asp

    K Offline
    K Offline
    Kharfax
    wrote on last edited by
    #17

    Thanks dude, that makes just what I need, but saving the icon as a file :S I need to get a resource ID or a HICON so I can add it to the list. I tried to adapt it, but I cant make it work. Maybe I just lost my patience and focus :(

    1 Reply Last reply
    0
    • K Kharfax

      Hi people Im filling a CListCtrl with a lot of exe files, and I would like to show the .exe icon next to its name. I tried the following : hMod = LoadLibraryEx(path, NULL, LOAD_LIBRARY_AS_DATAFILE); if(hMod != NULL) { imageIndex = m_imageList.Add(LoadIcon(hMod, MAKEINTRESOURCE(1))); Well, that works just in some cases, but doesn't in a lot. Does anyone knows what can I do to load the default icon of each exe? Shouldnt be so hard because explorer.exe open the icon always... Thanks in advance :D

      M Offline
      M Offline
      Mark Salsbery
      wrote on last edited by
      #18

      I use this to extract an icon (from any file, not just EXEs). This will get the default icon from Windows if none is in the exe. HICON hIcon = 0; // Try to extract an icon from the file itself SHFILEINFO shfi; memset(&shfi, 0, sizeof(shfi)); if (SHGetFileInfo(pszPathname, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(shfi), SHGFI_ICON | SHGFI_SMALLICON)) { hIcon = shfi.hIcon; } // If no icon yet, get icon associated with the file type from the shell if (hIcon == 0) { LPTSTR pszExtension = PathFindExtension(pszPathname); CString DummyFileName; DummyFileName = _T("dummyfile"); if (pszExtension[0] == _T('.')) DummyFileName += pszExtension; else DummyFileName += _T("."); SHFILEINFO shfi; memset(&shfi, 0, sizeof(shfi)); if (SHGetFileInfo(DummyFileName, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(shfi), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES)) { hIcon = shfi.hIcon; *pRetImgFlags |= RECORDIMGDATAFLAG_ICONFROMSHELL; } } if (hIcon) { ... Will that work? Mark

      1 Reply Last reply
      0
      • K Kharfax

        Hi people Im filling a CListCtrl with a lot of exe files, and I would like to show the .exe icon next to its name. I tried the following : hMod = LoadLibraryEx(path, NULL, LOAD_LIBRARY_AS_DATAFILE); if(hMod != NULL) { imageIndex = m_imageList.Add(LoadIcon(hMod, MAKEINTRESOURCE(1))); Well, that works just in some cases, but doesn't in a lot. Does anyone knows what can I do to load the default icon of each exe? Shouldnt be so hard because explorer.exe open the icon always... Thanks in advance :D

        M Offline
        M Offline
        Mark Salsbery
        wrote on last edited by
        #19

        I use this to get an icon for any file. This will get the default exe icon if none found in the exe itself: HICON hIcon = 0; // Try to extract an icon from the file itself SHFILEINFO shfi; memset(&shfi, 0, sizeof(shfi)); if (SHGetFileInfo(pszPathname, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(shfi), SHGFI_ICON | SHGFI_SMALLICON)) { hIcon = shfi.hIcon; } // If no icon yet, get icon associated with the file type from the shell if (hIcon == 0) { LPTSTR pszExtension = PathFindExtension(pszPathname); CString DummyFileName; DummyFileName = _T("dummyfile"); if (pszExtension[0] == _T('.')) DummyFileName += pszExtension; else DummyFileName += _T("."); SHFILEINFO shfi; memset(&shfi, 0, sizeof(shfi)); if (SHGetFileInfo(DummyFileName, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(shfi), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES)) { hIcon = shfi.hIcon; *pRetImgFlags |= RECORDIMGDATAFLAG_ICONFROMSHELL; } } if (hIcon) { ... } Is that what you're looking for? Mark

        M 1 Reply Last reply
        0
        • M Mark Salsbery

          I use this to get an icon for any file. This will get the default exe icon if none found in the exe itself: HICON hIcon = 0; // Try to extract an icon from the file itself SHFILEINFO shfi; memset(&shfi, 0, sizeof(shfi)); if (SHGetFileInfo(pszPathname, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(shfi), SHGFI_ICON | SHGFI_SMALLICON)) { hIcon = shfi.hIcon; } // If no icon yet, get icon associated with the file type from the shell if (hIcon == 0) { LPTSTR pszExtension = PathFindExtension(pszPathname); CString DummyFileName; DummyFileName = _T("dummyfile"); if (pszExtension[0] == _T('.')) DummyFileName += pszExtension; else DummyFileName += _T("."); SHFILEINFO shfi; memset(&shfi, 0, sizeof(shfi)); if (SHGetFileInfo(DummyFileName, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(shfi), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES)) { hIcon = shfi.hIcon; *pRetImgFlags |= RECORDIMGDATAFLAG_ICONFROMSHELL; } } if (hIcon) { ... } Is that what you're looking for? Mark

          M Offline
          M Offline
          Mark Salsbery
          wrote on last edited by
          #20

          Sorry about the double post. I got an error the first time. I should have checked to see if it posted first :) Mark

          K 1 Reply Last reply
          0
          • M Mark Salsbery

            Sorry about the double post. I got an error the first time. I should have checked to see if it posted first :) Mark

            K Offline
            K Offline
            Kharfax
            wrote on last edited by
            #21

            Thanks mate, and no problem about the double post. Yeap that works but I don't know why i have a lot of apps wich fail loading the icon :( I post my code, maybe someone sees what im doing wrong do { imageIndex = 0; keyNameLenght = 256; res = RegEnumKeyEx(phkResult, dwIndex, keyName, &keyNameLenght, NULL, NULL, NULL, NULL); if(res == ERROR_SUCCESS) { // Tomo icono // Busco Path en registro sprintf(lpSubKey2,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\%s\\", keyName); result = RegOpenKeyEx(HKEY_LOCAL_MACHINE,lpSubKey2,NULL,KEY_ALL_ACCESS,&phkResult2); if (ERROR_SUCCESS == result) { //Levanto Path if (ERROR_SUCCESS == RegQueryValue(phkResult2, NULL, path, &largoBuffer)) { CString tup = path; HICON temp = NULL; HMODULE hMod = NULL; int res = 0; WORD pis = 0; tup.Remove('"'); SHFILEINFO shfi; memset(&shfi, 0, sizeof(shfi)); if (SHGetFileInfo(tup,FILE_ATTRIBUTE_NORMAL,&shfi,sizeof(shfi),SHGFI_ICON | SHGFI_SMALLICON)) { temp = shfi.hIcon; imageIndex = m_imageList.Add(temp); } else { LPTSTR pszExtension = PathFindExtension(tup); CString DummyFileName; DummyFileName = _T("dummyfile"); if (pszExtension[0] == _T('.')) DummyFileName += pszExtension; else DummyFileName += _T("."); SHFILEINFO shfi; memset(&shfi, 0, sizeof(shfi)); if (SHGetFileInfo(keyName,FILE_ATTRIBUTE_NORMAL,&shfi,sizeof(shfi),SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES)) { temp = shfi.hIcon; } if(temp != NULL) { imageIndex = m_imageList.Add(temp); } else { imageIndex = 0; } } } //Agregar Elemento lvi.mask = LVIF_TEXT | LVIF_IMAGE; lvi.iItem = 0; lvi.iSubItem = 0; lvi.pszText = keyName; lvi.iImage = imageIndex; m_listOrigin.InsertItem(&lvi); m_listOrigin.SetItem(&lvi); } } dwIndex++; }while(res != ERROR_NO_MORE_ITEMS);

            M 2 Replies Last reply
            0
            • K Kharfax

              Thanks mate, and no problem about the double post. Yeap that works but I don't know why i have a lot of apps wich fail loading the icon :( I post my code, maybe someone sees what im doing wrong do { imageIndex = 0; keyNameLenght = 256; res = RegEnumKeyEx(phkResult, dwIndex, keyName, &keyNameLenght, NULL, NULL, NULL, NULL); if(res == ERROR_SUCCESS) { // Tomo icono // Busco Path en registro sprintf(lpSubKey2,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\%s\\", keyName); result = RegOpenKeyEx(HKEY_LOCAL_MACHINE,lpSubKey2,NULL,KEY_ALL_ACCESS,&phkResult2); if (ERROR_SUCCESS == result) { //Levanto Path if (ERROR_SUCCESS == RegQueryValue(phkResult2, NULL, path, &largoBuffer)) { CString tup = path; HICON temp = NULL; HMODULE hMod = NULL; int res = 0; WORD pis = 0; tup.Remove('"'); SHFILEINFO shfi; memset(&shfi, 0, sizeof(shfi)); if (SHGetFileInfo(tup,FILE_ATTRIBUTE_NORMAL,&shfi,sizeof(shfi),SHGFI_ICON | SHGFI_SMALLICON)) { temp = shfi.hIcon; imageIndex = m_imageList.Add(temp); } else { LPTSTR pszExtension = PathFindExtension(tup); CString DummyFileName; DummyFileName = _T("dummyfile"); if (pszExtension[0] == _T('.')) DummyFileName += pszExtension; else DummyFileName += _T("."); SHFILEINFO shfi; memset(&shfi, 0, sizeof(shfi)); if (SHGetFileInfo(keyName,FILE_ATTRIBUTE_NORMAL,&shfi,sizeof(shfi),SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES)) { temp = shfi.hIcon; } if(temp != NULL) { imageIndex = m_imageList.Add(temp); } else { imageIndex = 0; } } } //Agregar Elemento lvi.mask = LVIF_TEXT | LVIF_IMAGE; lvi.iItem = 0; lvi.iSubItem = 0; lvi.pszText = keyName; lvi.iImage = imageIndex; m_listOrigin.InsertItem(&lvi); m_listOrigin.SetItem(&lvi); } } dwIndex++; }while(res != ERROR_NO_MORE_ITEMS);

              M Offline
              M Offline
              Mark Salsbery
              wrote on last edited by
              #22

              >>...but I don't know why i have a lot of apps wich fail loading the icon What do you mean? EXEs without icons? Are you just getting the default EXE icon or none at all? Mark

              1 Reply Last reply
              0
              • K Kharfax

                Thanks mate, and no problem about the double post. Yeap that works but I don't know why i have a lot of apps wich fail loading the icon :( I post my code, maybe someone sees what im doing wrong do { imageIndex = 0; keyNameLenght = 256; res = RegEnumKeyEx(phkResult, dwIndex, keyName, &keyNameLenght, NULL, NULL, NULL, NULL); if(res == ERROR_SUCCESS) { // Tomo icono // Busco Path en registro sprintf(lpSubKey2,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\%s\\", keyName); result = RegOpenKeyEx(HKEY_LOCAL_MACHINE,lpSubKey2,NULL,KEY_ALL_ACCESS,&phkResult2); if (ERROR_SUCCESS == result) { //Levanto Path if (ERROR_SUCCESS == RegQueryValue(phkResult2, NULL, path, &largoBuffer)) { CString tup = path; HICON temp = NULL; HMODULE hMod = NULL; int res = 0; WORD pis = 0; tup.Remove('"'); SHFILEINFO shfi; memset(&shfi, 0, sizeof(shfi)); if (SHGetFileInfo(tup,FILE_ATTRIBUTE_NORMAL,&shfi,sizeof(shfi),SHGFI_ICON | SHGFI_SMALLICON)) { temp = shfi.hIcon; imageIndex = m_imageList.Add(temp); } else { LPTSTR pszExtension = PathFindExtension(tup); CString DummyFileName; DummyFileName = _T("dummyfile"); if (pszExtension[0] == _T('.')) DummyFileName += pszExtension; else DummyFileName += _T("."); SHFILEINFO shfi; memset(&shfi, 0, sizeof(shfi)); if (SHGetFileInfo(keyName,FILE_ATTRIBUTE_NORMAL,&shfi,sizeof(shfi),SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES)) { temp = shfi.hIcon; } if(temp != NULL) { imageIndex = m_imageList.Add(temp); } else { imageIndex = 0; } } } //Agregar Elemento lvi.mask = LVIF_TEXT | LVIF_IMAGE; lvi.iItem = 0; lvi.iSubItem = 0; lvi.pszText = keyName; lvi.iImage = imageIndex; m_listOrigin.InsertItem(&lvi); m_listOrigin.SetItem(&lvi); } } dwIndex++; }while(res != ERROR_NO_MORE_ITEMS);

                M Offline
                M Offline
                Mark Salsbery
                wrote on last edited by
                #23

                >>...but I don't know why i have a lot of apps wich fail loading the icon What do you mean? EXEs without icons? Are you just getting the default EXE icon or none at all? By the way, don't forget to use DestroyIcon() on the returned HICON after you add it to your image list :) Mark

                K 1 Reply Last reply
                0
                • M Mark Salsbery

                  >>...but I don't know why i have a lot of apps wich fail loading the icon What do you mean? EXEs without icons? Are you just getting the default EXE icon or none at all? By the way, don't forget to use DestroyIcon() on the returned HICON after you add it to your image list :) Mark

                  K Offline
                  K Offline
                  Kharfax
                  wrote on last edited by
                  #24

                  First thanks to all the people that helped me with that :D The problem wasn't the technique used to get the icon, the problem was that when I used RegQueryValue I didn't re initialized the variable with the buffer lenght :sigh: So a lot of entries were corrupt and that's why some exe didn't get an icon

                  M 1 Reply Last reply
                  0
                  • K Kharfax

                    First thanks to all the people that helped me with that :D The problem wasn't the technique used to get the icon, the problem was that when I used RegQueryValue I didn't re initialized the variable with the buffer lenght :sigh: So a lot of entries were corrupt and that's why some exe didn't get an icon

                    M Offline
                    M Offline
                    Mark Salsbery
                    wrote on last edited by
                    #25

                    Cool! And remember, don't forget to use DestroyIcon() on the returned HICON after you add it to your image list :) Mark

                    K 1 Reply Last reply
                    0
                    • M Mark Salsbery

                      Cool! And remember, don't forget to use DestroyIcon() on the returned HICON after you add it to your image list :) Mark

                      K Offline
                      K Offline
                      Kharfax
                      wrote on last edited by
                      #26

                      Done :D Thanks a lot Mark, you were really helpful

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups