windows-nt/Source/XPSP1/NT/sdktools/tweakui/pidl.cpp
2020-09-26 16:20:57 +08:00

119 lines
2.8 KiB
C++

/*
* 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);
}
}