How to get en exe default icon
-
Sorry about the double post. I got an error the first time. I should have checked to see if it posted first :) Mark
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);
-
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);
>>...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
-
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);
>>...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
-
>>...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
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
-
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
Cool! And remember, don't forget to use DestroyIcon() on the returned HICON after you add it to your image list :) Mark
-
Cool! And remember, don't forget to use DestroyIcon() on the returned HICON after you add it to your image list :) Mark