【 tulaoshi.com - 编程语言 】
                             
                              使用API函数SHGetSpecialFolder。shlobj.h里有SHGetSpecialFolder的原型声明。这个函数可以帮我们找到windows的Desktop目录、启动目录、我的文档目录等。 
  SHGetSpecialFolder需要三个参数。 第一个参数是HWND,它指定了"所有者窗口":在调用这个函数时可能出现的对话框或消息框。第二个参数是一个整数id,决定哪个目录是待查找目录,它的取值可能是:   
  CSIDL_B99vBUCKET 回收站 
  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)
  {
  LP99vEMIDLIST 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();
  }
  }
  //----------------------------------------------------------------------
  注重: 有些目录是空的。有些特定的目录在这个文件系统上并没有一个相应的目录。