SHGetDesktopFolder()怎么指向指定盘符(如:E盘)
SHGetDesktopFolder()如何指向指定盘符(如:E盘)
如题,我在做一个资源管理器,现在程序每次运行首先指向的是桌面,我想让它指向E盘根目录,请问大家如何修改??程序如下:
void DirTreeView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
CTreeCtrl &Tree=GetTreeCtrl();
LPSHELLFOLDER lpsf=NULL; //IShellFolder接口
LPITEMIDLIST lpi=NULL; //ITERMIDLSIT结构体指针
HRESULT hr;
TV_ITEM tvi;
CImageList m_Image;//记录的是与树型控件关联的图像列表
SHFILEINFO sfi;//存放文件信息的结构
HIMAGELIST sys_small_icon;
sys_small_icon = (HIMAGELIST)SHGetFileInfo(NULL,0,&sfi,sizeof(sfi),
SHGFI_SYSICONINDEX|SHGFI_SMALLICON);
m_Image.Attach(sys_small_icon);
Tree.SetImageList(&m_Image,TVSIL_NORMAL);//将系统图像列表设为树控件的图象列表
m_Image.Detach ();
// 得到指向“桌面”的指针
hr=SHGetDesktopFolder(&lpsf);
//SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&lpi);
SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&lpi);
if (SUCCEEDED(hr))
{
Tree.DeleteAllItems();
char szBuff[MAX_PATH];//存放显示名称的缓冲区
TV_INSERTSTRUCT tvis; //向树型控件中插入节点时使用的结构
tvi.mask = TVIF_TEXT | TVIF_IMAGE |
TVIF_SELECTEDIMAGE | TVIF_CHILDREN ; //设置要插入的树节点信息
if(GetName(lpsf,lpi,SHGDN_NORMAL,szBuff)==FALSE)
return;
tvi.pszText = szBuff;//设置显示名称
GetNormalAndSelectedIcons(lpi, &tvi);
tvis.item = tvi;
tvis.hParent = TVI_ROOT;
hParent = GetTreeCtrl().InsertItem(&tvis);//插入根节点
FillTreeView(lpsf, NULL, hParent);
GetTreeCtrl().Expand (hParent,TVE_EXPAND);//展开“桌面”节点
lpsf->Release ();
}
}
------解决方案--------------------
SHGetDesktopFolder 这个API就是去获取桌面,它不能指向E盘
------解决方案--------------------
修改注册表
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
下面的对应项目试试。
后果自负!
------解决方案--------------------
SetCurrentDirectory
The SetCurrentDirectory function changes the current directory for the current process.
BOOL SetCurrentDirectory(
LPCTSTR lpPathName // pointer to name of new current directory
);
------解决方案--------------------
直接用 ILCreateFromPath
------解决方案--------------------
ILCreateFromPath:
MSDN2005:ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/shell/reference/functions/ilcreatefrompathw.htm
MSDN2008:ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/shellcc/platform/shell/reference/functions/ilcreatefrompathw.htm
如题,我在做一个资源管理器,现在程序每次运行首先指向的是桌面,我想让它指向E盘根目录,请问大家如何修改??程序如下:
void DirTreeView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
CTreeCtrl &Tree=GetTreeCtrl();
LPSHELLFOLDER lpsf=NULL; //IShellFolder接口
LPITEMIDLIST lpi=NULL; //ITERMIDLSIT结构体指针
HRESULT hr;
TV_ITEM tvi;
CImageList m_Image;//记录的是与树型控件关联的图像列表
SHFILEINFO sfi;//存放文件信息的结构
HIMAGELIST sys_small_icon;
sys_small_icon = (HIMAGELIST)SHGetFileInfo(NULL,0,&sfi,sizeof(sfi),
SHGFI_SYSICONINDEX|SHGFI_SMALLICON);
m_Image.Attach(sys_small_icon);
Tree.SetImageList(&m_Image,TVSIL_NORMAL);//将系统图像列表设为树控件的图象列表
m_Image.Detach ();
// 得到指向“桌面”的指针
hr=SHGetDesktopFolder(&lpsf);
//SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&lpi);
SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&lpi);
if (SUCCEEDED(hr))
{
Tree.DeleteAllItems();
char szBuff[MAX_PATH];//存放显示名称的缓冲区
TV_INSERTSTRUCT tvis; //向树型控件中插入节点时使用的结构
tvi.mask = TVIF_TEXT | TVIF_IMAGE |
TVIF_SELECTEDIMAGE | TVIF_CHILDREN ; //设置要插入的树节点信息
if(GetName(lpsf,lpi,SHGDN_NORMAL,szBuff)==FALSE)
return;
tvi.pszText = szBuff;//设置显示名称
GetNormalAndSelectedIcons(lpi, &tvi);
tvis.item = tvi;
tvis.hParent = TVI_ROOT;
hParent = GetTreeCtrl().InsertItem(&tvis);//插入根节点
FillTreeView(lpsf, NULL, hParent);
GetTreeCtrl().Expand (hParent,TVE_EXPAND);//展开“桌面”节点
lpsf->Release ();
}
}
------解决方案--------------------
SHGetDesktopFolder 这个API就是去获取桌面,它不能指向E盘
------解决方案--------------------
修改注册表
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
下面的对应项目试试。
后果自负!
------解决方案--------------------
SetCurrentDirectory
The SetCurrentDirectory function changes the current directory for the current process.
BOOL SetCurrentDirectory(
LPCTSTR lpPathName // pointer to name of new current directory
);
------解决方案--------------------
直接用 ILCreateFromPath
------解决方案--------------------
ILCreateFromPath:
MSDN2005:ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/shell/reference/functions/ilcreatefrompathw.htm
MSDN2008:ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/shellcc/platform/shell/reference/functions/ilcreatefrompathw.htm