判定windows的Desktop及其它目次
利用API函数SHGetSpecialFolder。shlobj.h里有SHGetSpecialFolder的原型声明。这个函数可以帮我们找到windows的Desktop目次、启动目次、我的文档目次等。
SHGetSpecialFolder需要三个参数。 第一个参数是HWND,它指定了"所有者窗口":在挪用这个函数时大概呈现的对话框或动静框。第二个参数是一个整数id,抉择哪个目次是待查找目次,它的取值大概是:
CSIDL_BITBUCKET 接纳站
CSIDL_CONTROLS 节制面板
CSIDL_DESKTOP Windows 桌面desktop
CSIDL_DESKTOPDIRECTORY desktop的目次
CSIDL_DRIVES 我的电脑
CSIDL_FONTS 字体目次
CSIDL_NETHOOD 网上邻人
CSIDL_NETWORK 网上邻人virtual folder
CSIDL_PERSONAL 我的文档
CSIDL_PRINTERS 打印机
CSIDL_PROGRAMS 措施组
CSIDL_RECENT 大大都最近打开的文档列一
CSIDL_SENDTO “发送到”菜单项
CSIDL_STARTMENU 任务条启动菜单项
CSIDL_STARTUP 启动目次
CSIDL_TEMPLATES 姑且文档
最后一个参数是pidl地点。SHGetSpecialFolderLocation把地点写到pidl。
下面的代码演示了奈何利用SHGetSpecialFolderLocation:
//----------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
LPITEMIDLIST pidl;
LPMALLOC pShellMalloc;
char szDir[MAX_PATH];
if(SUCCEEDED(SHGetMalloc(&pShellMalloc)))
{
if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,
CSIDL_DESKTOPDIRECTORY,
&pidl)))
{
// 假如乐成返回true
if(SHGetPathFromIDList(pidl, szDir))
{
Label1->Caption = szDir;
}
pShellMalloc->Free(pidl);
}
pShellMalloc->Release();
}
}
//----------------------------------------------------------------------
留意: 有些目次是空的。有些特定的目次在这个文件系统上并没有一个相应的目次。