119 lines
2.8 KiB
C++
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);
|
||
|
}
|
||
|
}
|