Windows 2000 UI 新特点之三:搜索管理器
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/) 原文参见:MSDN Magazine March 2000
编译/赵湘宁
第一部分 Windows 2000 UI 新特点之一:信息条提示(Infotip)
第二部分 Windows 2000 UI 新特点之二:自定义文件夹栏目
摘要:本文是关于Windows 2000 UI 新特点系列文章的第三篇,将创建一个简单的对象搜索管理器扩展(Search Handler)。
搜索处理是与外壳的用户接口集成在一起的一个模块,允许您查找对象,如:文件、打印机、网络计算机和消息等。从"开始"菜单进入"搜索"子菜单(在以前的Windows版本中,这个菜单叫做"Find"或“查找”,现在为"Search"或“搜索”),可以进入对象的搜索处理。在Windows 2000 之前,资源浏览器的"工具"菜单中包含着一个相同的子菜单副本,对这种功能提供了一种可选择的访问方式。
到了Windows 2000,资源浏览器通过一个联合对象实现其自己搜索面板。想要添加自己的搜索面板,必须自己编写一个新的联合对象。关于联合对象描述将在另外的文章中专门来讨论,这里只是提出这个概念和方法。新的搜索面板完全基于DHTML,并且完全代替了Windows 2000 以前的"查找(Find)"对话框。您可以使用与在Windows 9x 或 Windows NT下相同的方法和代码来运行它:
ShellExecute(NULL, "find", NULL, NULL, NULL, 0);上面的代码只是运行“搜索”功能,要想在"搜索"菜单中增加一个新的菜单项,那完全是另外一回事,“搜索”菜单读取注册表下列路径入口:
HKLM SOFTWARE Microsoft Windows CurrentVersion Explorer FindExtensions有两种类型的菜单项:静态和动态。静态菜单项只有在需要时被加载,而动态扩展被绑定到外壳的生命周期中,它在外壳启动时被加载,在外壳进程结束时被终止。一般情况下,只需要写一个静态扩展。动态扩展必须要在上面所述的节点处注册。静态扩展必须在一个叫做"Static"的公共键下被分组,被放在"FindExtensions"下。
什么是搜索处理器呢?它是一个非常简单的上下文菜单外壳扩展类型。为了编写一个搜索处理器,只要写一个上下文菜单外壳扩展的框架即可。也就是说,您必须实现IContextMenu 和IShellExtInit。ICcontextMenu 暴露三个函数:第一个是QueryContextMenu,用于增加一个或更多的菜单项;第二个是GetCommandString,为用于提供描述;第三个是InvokeCommand,负责执行代码响应用户的点击。对一个搜索处理器而言,只需要InvokeCommand,其它两个函数可以忽略。
图九 使用 Find Process 搜索管理器
图九是一个"Find Process"搜索处理器的运行时例子。Windows 2000也支持ToolHelp API来获得关于运行进程和模块的系统信息。Windows 9x支持ToolHelp,但Windows NT 4.0不支持ToolHelp(Windows NT 4.0中使用另外一个API:PSAPI)。详细信息请参考本文源代码。