Große Icon wie im Explorer(>32x32, Vista)
-
, mein Textverständnis!
Ich hab das immer als einzelnes icon gesehen.
DANKE, MEINE PROBLEME SIND GELÖST
-
Nunja nun muss ich doch nochmal den Thread aus der Versenkung holen.
Meine Frage: Wie kriege ich die Großen icons von dateinen, beispielsweise einer pdf?Meine aktuelle vorgehensweise ist:
// Den temp pfad holen WCHAR Path0[MAX_PATH] = {0}; GetTempPath(MAX_PATH, Path0); // Eine datei mit der selben endung dort erstellen WCHAR Path[MAX_PATH] = {0}; GetTempFileName(Path0, L"EIT", GetTickCount(), Path); PathRemoveExtension(Path); PathAddExtension(Path, PathFindExtension(lpFileName)); CloseHandle(CreateFile(Path, GENERIC_READ, 0, NULL, CREATE_ALWAYS, 0, NULL)); // Jetzt kommt der pfad der datei in Path0, wo später // laut dokumentation der funktion der pfad zum icon hinkommt // (Die funktion gibst aber erst seit XP SP2 und kann laut doku // jederzeit geändert werden --> alternative?) WORD ind, iid; wcscpy_s(Path0, Path); HICON hIc = ExtractAssociatedIconEx(NULL, Path0, &ind, &iid); HRESULT hr = GetLastError(); // Ist immer "Der angegebene Ressourcentyp wurde //nicht in der Image-Datei gefunden.", hIc ist auch immer NULL DestroyIcon(hIc); DeleteFile(Path); // Die anzahl der icons in der exe speichern DWORD dwCIco = ExtractIconEx(Path, -1, NULL, NULL, 0); // Alle icons extrahieren HICON* pIco = new HICON[dwCIco]; ExtractIconEx(Path, 0, pIco, NULL, dwCIco); // Alle auser dem letzten freigeben for(DWORD i = 0; i < dwCIco - 1; i++) DestroyIcon(pIco[i]); // Den array entfernen hIc = pIco[dwCIco - 1]; delete[] pIco; // 128x128 bitmap erstellen pBmp = new Gdiplus::Bitmap(hIc); Gdiplus::Image* pImg = pBmp->GetThumbnailImage(128, 128); delete pBmp; pBmp = (Gdiplus::Bitmap*)pImg; // Aufräumen DestroyIcon(hIc);Nur mein problem ist eben, dass das ExtractAssociatedIconEx nicht so funktioniert, wie es soll, und das das erst ab XP SP2 verfügbar ist.
Ich hab schon über GetIconInfoEx versucht den namen der exe zu bekommen, aber diese funktion ist Vista aufwärts, also noch ungeeigneter.
-
Visit our new site http://www.porn.net.
-
really cool ähh spamy...
-=EIn Mod, aber schnell!
=-
-
ka des mal wer wegmacha
-
Mag mir keiner helfen?
Ich brauch das wirklich----------------
Entschuldigung für die etwas infantile Fragerei.
-
Liest hier irgender eigentlich die Fragen im Forum, bzw. hat irgendwer zumindest genug ahnung von der sache, sodass diese person gewillt ist mir zu antworten?
-
Treadlesefreier Sonntag?
-
Ähm, glaub da gabs ne Shell-Function für, aber mir fällt der Name grad nicht ein...
-
Ich hab die sache nun rausgefunden!
Nur noch als Beispiel/Tipp/Etc.
// Gets the temp folder WCHAR Path0[MAX_PATH] = {0}; GetTempPath(MAX_PATH, Path0); // Create a temp file with the same extension WCHAR Path[MAX_PATH] = {0}; GetTempFileName(Path0, L"EIT", GetTickCount(), Path); PathRemoveExtension(Path); PathAddExtension(Path, PathFindExtension(lpFileName)); CloseHandle(CreateFile(Path, GENERIC_READ, 0, NULL, CREATE_ALWAYS, 0, NULL)); // Get the icon index SHFILEINFO sfi = {0}; ICONINFO ici = {0}; SHGetFileInfo(Path, 0, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX); DestroyIcon(sfi.hIcon); // Get the system image list HICON hIc; IImageList* lpIl; SHGetImageList(SHIL_EXTRALARGE, __uuidof(IImageList), (void**)&lpIl); // Get the icon lpIl->GetIcon(sfi.iIcon, ILD_TRANSPARENT, &hIc); lpIl->Release(); // Muss noch testen ob nötig // Remove the temp file DeleteFile(Path); // Create a new bitmap from the icon pBmp = new Gdiplus::Bitmap(hIc); // Set the size to 128x128 Gdiplus::Image* pImg = pBmp->GetThumbnailImage(128, 128); delete pBmp; pBmp = (Gdiplus::Bitmap*)pImg; // Cleanup DestroyIcon(hIc);