Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1559058
  • 博文数量: 884
  • 博客积分: 52280
  • 博客等级: 大将
  • 技术积分: 13060
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-06 09:46
文章分类

全部博文(884)

文章存档

2008年(884)

我的朋友

分类: C/C++

2008-08-06 09:52:56

下载本文示例代码
第一部分 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)。详细信息请参考本文源代码。 下载本文示例代码

阅读(217) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~