Shell FAQ

来源:互联网 发布:mac 系统占用空间太大 编辑:程序博客网 时间:2024/05/29 08:40

翻译自MSDN 2005 -> Win32 和 COm 开发 -> User Interface -> Windows User Experience -> Windows Shell -> Shell Programmer's Guide -> Shell FAQ

文中相关链接未给出(因为链接都是相对于MSDN的,给出也没什么意义),随后闲着无聊的时候,会翻译相关文档。

本FAQ提供了关于Shell的常见问题的答案,提供了有关详细讨论文档的链接。

  • Shell命名空间和命名空间对象是什么?

   Shell命名空间把文件系统对象和其他由Shell管理的对象组织到单个树状层次结构中。从概念上来说,Shell命名空间是一个更大的包含内容更多的文件系统。Shell命名空间不仅包括文件系统的文件夹和文件,还包括像回收站和打印机文件夹这样的虚拟对象。

  • 是否有可以让用户选择文件夹的对话框?

   SHBrowseForFolder函数显示一个可以让用户选择目录的对话框,函数返回一个PIDL(pointer to an item identifier list,项目标识符列表指针)。

  • PIDL是什么?为什么不仅仅使用文件系统路径?

   PIDL是一种标识Shell命名空间对象的方法。当然也可以用路径来标识对象,但是仅限于属于文件系统的对象。对于不是文件系统对象的对象,必须使用PIDL。

  • 如何获取命名空间对象的PIDL?

   有很多种获取对象PIDL的方法,常见的有:

  • 使用桌面的ParseDisplayName方法把文件系统路径转换成等价的PIDL。这个方法也可以转换全局唯一标识符(globally unique identifier,GUID)到PIDL。
  • 使用SHBrowseForFolder函数显示一个可以让用户选择文件夹的对话框,函数会返回PIDL。
  • 使用文件夹的CSIDL来获取其PIDL。像程序(Program files)和打印机这样的特殊文件夹,都分配了一个称作CSIDL的标识,可以通过它来获取文件夹的PIDL。
  • 浏览Shell命名空间直到定位到所需对象。 
     
  • 如何在Windows 2000之前版本的系统上使用SHGetFolderPath

   SHGetFolderPath在一个可重新发布的DLL--ShFolder.dll中。

  • 如何把PIDL转换回文件路径?

   用Shell API函数SHGetPathFromIDList

  • 相对PIDL和全限定PIDL有何不同?

   这跟相对文件路径和绝对文件路径的不同类似。PIDL就像文件路径那样,定义了命名空间中的一条路径,路径中的每个部分都由PIDL中的一个元素表示。全限定PIDL从命名空间的根,即桌面开始;而相对PIDL则从空间中的其他地方开始。一些Shell函数需要全限定PIDL,另外一些则要求使用相对PIDL,所以理解需要哪种PIDL是很重要的。

  • 如何获取文件图标?如何获取文件的友好名字(friendly name)?

   使用Shell API函数SHGetFileInfo

  • 可以定制对象在资源管理器中的显示方式吗?

   有两种方法可以实现对象显示方式定制:

  • 为文件夹创建Desktop.ini文件
  • 创建定制的folder.htt文件 
     
  • 如何使用拖放来传输像文件或文件夹这样的名字空间对象?

   有多种可以用于传输Shell对象的Shell特定的剪贴板格式,参阅Transferring Shell Objects with Drag-and-Drop and the Clipboard

  • 文件关联和文件类型是什么?如何创建文件关联?

   文件关联和文件类型的意思是一样的。文件关联或者文件类型由具有相同扩展名的所有文件构成。在注册表中创建文件类型后,就可以定制所有该类型文件的行为了。比如说,可以用定制的文件类型图标替换标准文件类型图标,或者向其快捷菜单中添加条目。

  • 如何使用自动运行来启动CD-ROM中的程序?

   在CD-ROM中创建AutoRun.inf文件即可。

  • 我的文档(My Documents)文件夹是什么,怎么使用?

   我的文档文件夹提供了当前用户的默认文档文件存放位置,它自动映射到当前用户文档文件在文件系统中的存放位置,其使用方式跟普通文件系统文件夹类似。


菊子曰 本文用菊子曰发布
原创粉丝点击