/* * pidl - PIDLs and diddles * */ #include "tweakui.h" #pragma BEGIN_CONST_DATA #pragma END_CONST_DATA /***************************************************************************** * * pidlFromPath * * Create a pidl from an psf and a relative path. * *****************************************************************************/ PIDL PASCAL pidlFromPath(LPSHELLFOLDER psf, LPCTSTR lqn) { PIDL pidl; UnicodeFromPtsz(wsz, lqn); if (SUCCEEDED(psf->ParseDisplayName(0, 0, wsz, 0, &pidl, 0))) { return pidl; } else { return 0; } } /***************************************************************************** * * pidlSimpleFromPath * * Create a simple pidl from an psf and a relative path. * *****************************************************************************/ PIDL PASCAL pidlSimpleFromPath(LPCTSTR lqn) { PIDL pidl; if (g_fNT) { UnicodeFromPtsz(wsz, lqn); return mit.SHSimpleIDListFromPath(wsz); } else { AnsiFromPtsz(sz, lqn); return mit.SHSimpleIDListFromPath(sz); } } /***************************************************************************** * * SetNameOfPidl * * Change a pidl's name. * *****************************************************************************/ HRESULT PASCAL SetNameOfPidl(PSF psf, PIDL pidl, LPCTSTR ptszName) { UnicodeFromPtsz(wsz, ptszName); return psf->SetNameOf(0, pidl, wsz, 0, 0); } /***************************************************************************** * * ComparePidls * * Compare two pidls. * *****************************************************************************/ HRESULT PASCAL ComparePidls(PIDL pidl1, PIDL pidl2) { return psfDesktop->CompareIDs(0, pidl1, pidl2); } /***************************************************************************** * * GetSystemImageList * * Get the large or small image list handle. * * The dword argument is 0 for the large image list, or * SHGFI_SMALLICON for the small image list. * *****************************************************************************/ HIML PASCAL GetSystemImageList(DWORD dw) { SHFILEINFO sfi; return (HIML)SHGetFileInfo(g_tszPathShell32, FILE_ATTRIBUTE_DIRECTORY, &sfi, sizeof(sfi), SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX | dw); } /***************************************************************************** * * ChangeNotifyCsidl * * Send a SHChangeNotify based on a CSIDL. * *****************************************************************************/ STDAPI_(void) ChangeNotifyCsidl(HWND hwnd, int csidl, LONG eventId) { PIDL pidl; if (SUCCEEDED(SHGetSpecialFolderLocation(hwnd, csidl, &pidl))) { SHChangeNotify(eventId, SHCNF_IDLIST, pidl, 0L); Ole_Free(pidl); } }