梁肇新编程日记(2) 2001年 47期 2001年2月25日 星期日   #2计划:   1.完成“发送到”“移动到”两个右键菜单   2.可生成及删除自定义文件夹   #2实施:   对于生成SendTo菜单,我们考虑加入“发送到软盘”、“我的文档”、“我的公文包”、“自定义文件夹”等项目。关于SendTo的工作方法一直不大明白,在这方面花了不少时间,最后发现它的处理机制与粘贴差不多。这样,自定义文件夹可以在SendTo中存放,这种右键菜单就会有这一个名目,不用自己管理。   为了完美实现SendTo的功能,先要想办法区分捷径的类型。解析捷径是以前没有接触过的,在实施的时候我们首先要了解系统是如何区分SendTo目标的。经过使用SoftICE分析,发现需要用到GetDefaultMenuItem和ContextMenu,利用ShellExecuteEx来执行。解析出执行的文件名用做ShellExecuteEx的参数。而且,我们也发现在帮助(MSDN)中有一个与创建捷径对应的解决捷径的例子程序。   有了解决捷径的方法,就可以取到捷径对象的命令行的IDList,用命令行可以通过SHGetFileInfo取到是否是EXE类型,用IDList来确定是否是一个文件夹。只要不是可执行的类型都用粘贴的方法,而可执行的类型用“Open”方法。从而可以与系统的“发送到”相同的动作。缺省动作菜单用GetMenuDefaultItem来取得。   自定义文件夹可以直接用捷径方式。原来打算用命名空间方式建立索引;现在发现自定义文件夹是最方便的方式。可以使用列表的方式列出可以移动的文件夹。可以添加和删除文件夹名称的命名。并且需要建立一个删除的文件列表,只要比较一下即可知道。新添加的就没有参数指针。   除了“发送到”(SendTo)之外还可以添加一个“转移到”(MoveTo)菜单,由于发送到文件夹中有一些不是文件夹,所以在“转移到”(MoveTo)文件夹之中可以只有文件夹。