/************************************************************************** * IExtractIconA_Constructor */ IExtractIconA* IExtractIconA_Constructor(LPCITEMIDLIST pidl) { IExtractIconW *extractIconW; IExtractIconA *extractIconA; HRESULT hr; extractIconW = IExtractIconW_Constructor(pidl); if (!extractIconW) return NULL; hr = extractIconW->QueryInterface(IID_PPV_ARG(IExtractIconA, &extractIconA)); extractIconW->Release(); if (FAILED(hr)) return NULL; return extractIconA; }
/* * Class: sun_awt_shell_Win32ShellFolder2 * Method: extractIcon * Signature: (JJZ)J */ JNIEXPORT jlong JNICALL Java_sun_awt_shell_Win32ShellFolder2_extractIcon (JNIEnv* env, jclass cls, jlong pIShellFolderL, jlong relativePIDL, jboolean getLargeIcon) { IShellFolder* pIShellFolder = (IShellFolder*)pIShellFolderL; LPITEMIDLIST pidl = (LPITEMIDLIST)relativePIDL; if (pIShellFolder == NULL || pidl == NULL) { return 0; } HICON hIcon = NULL; HRESULT hres; IExtractIconW* pIcon; hres = pIShellFolder->GetUIObjectOf(NULL, 1, const_cast<LPCITEMIDLIST*>(&pidl), IID_IExtractIconW, NULL, (void**)&pIcon); if (SUCCEEDED(hres)) { WCHAR szBuf[MAX_PATH]; INT index; UINT flags; hres = pIcon->GetIconLocation(GIL_FORSHELL, szBuf, MAX_PATH, &index, &flags); if (SUCCEEDED(hres)) { HICON hIconLarge; hres = pIcon->Extract(szBuf, index, &hIconLarge, &hIcon, (16 << 16) + 32); if (SUCCEEDED(hres)) { if (getLargeIcon) { fn_DestroyIcon((HICON)hIcon); hIcon = hIconLarge; } else { fn_DestroyIcon((HICON)hIconLarge); } } } pIcon->Release(); } return (jlong)hIcon; }