// @pymethod |PyIExtractIconW|GetIconLocation|Description of GetIconLocation. PyObject *PyIExtractIconW::GetIconLocation(PyObject *self, PyObject *args) { IExtractIconW *pIEI = GetI(self); if ( pIEI == NULL ) return NULL; // @pyparm int|uFlags||Description for uFlags // @pyparm int|cchMax|MAX_PATH+MAX_FNAME|Buffer size to allocate for file name UINT uFlags; INT cchMax = MAX_PATH + _MAX_FNAME; if ( !PyArg_ParseTuple(args, "i|i:GetIconLocation", &uFlags, &cchMax)) return NULL; WCHAR *buf = (WCHAR *)malloc(cchMax * sizeof(WCHAR)); if (!buf) return PyErr_NoMemory(); INT iIndex; UINT flags; HRESULT hr; PY_INTERFACE_PRECALL; hr = pIEI->GetIconLocation( uFlags, buf, cchMax, &iIndex, &flags); PY_INTERFACE_POSTCALL; if ( FAILED(hr) ) { free(buf); return PyCom_BuildPyException(hr, pIEI, IID_IExtractIconW ); } PyObject *retStr = PyWinObject_FromWCHAR(buf); free(buf); return Py_BuildValue("iNii", hr, retStr, iIndex, flags); }
// @pymethod |PyIExtractIconW|Extract|Description of Extract. PyObject *PyIExtractIconW::Extract(PyObject *self, PyObject *args) { IExtractIconW *pIEI = GetI(self); if ( pIEI == NULL ) return NULL; // @pyparm <o unicode>|pszFile||Description for pszFile // @pyparm int|nIconIndex||Description for nIconIndex // @pyparm int|nIconSize||Description for nIconIndex HICON hiconLarge; HICON hiconSmall; PyObject *obpszFile; WCHAR *pszFile; UINT nIconIndex; UINT nIconSize; if ( !PyArg_ParseTuple(args, "Oii:Extract", &obpszFile, &nIconIndex, &nIconSize) ) return NULL; BOOL bPythonIsHappy = TRUE; if (!PyWinObject_AsWCHAR(obpszFile, &pszFile)) bPythonIsHappy = FALSE; if (!bPythonIsHappy) return NULL; HRESULT hr; PY_INTERFACE_PRECALL; hr = pIEI->Extract( pszFile, nIconIndex, &hiconLarge, &hiconSmall, nIconSize ); PyWinObject_FreeWCHAR(pszFile); PY_INTERFACE_POSTCALL; if ( FAILED(hr) ) return PyCom_BuildPyException(hr, pIEI, IID_IExtractIconW ); if (hr==S_FALSE) return Py_BuildValue("OO", Py_None, Py_None); return Py_BuildValue("NN", PyWinLong_FromHANDLE(hiconLarge), PyWinLong_FromHANDLE(hiconSmall)); // @rdesc The result is (hicon_large, hicon_small), or // (None,None) if the underlying function returns S_FALSE, indicating // the calling application should extract it. }
/************************************************************************** * 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; }