首 页 ┆ 源码下载 ┆ IT学院 ┆ 字体下载 ┆ 模板下载 ┆ 源码发布 ┆ 广告合作 ┆ 网站地图
► 设为首页
► 加入收藏
► 联系我们
源码下载 >> ASP源码 | PHP源码 | ASP.net源码 | JSP源码 | CGI源码 | VC/C++源码 | VB源码 | Delphi源码 | Flash源码
文章学院 >> 网络编程 | 网页设计 | 图形图象 | 数据库 | 服务器 | 网络媒体 | 网络安全 | 操作系统 | 办公软件 | 软件开发 | 黑客知识
字体下载 >> 精制字体 | 非英字体 | 艺术字体 | 著名字体 | 哥特式 | 简单字体 | 手写体 | 节假日 | 图案字体 | 精度像素 | 中文字体
模板下载 >> 企业门户 | 数码网络 | 休闲娱乐 | 影视音乐 | 旅游名胜 | 文化艺术 | 电子商务 | 个性展示 | 登陆导航 | Flash模板
►►您当前的位置:源码园 → IT学院 → 软件开发 → VC编程 → 文章内容

Windows 2000 UI 新特点之四:其他类型的外壳扩展

作者:佚名  来源:网上收集  发布时间:2007-3-27 10:18:52

Windows 2000 UI 新特点之四:其他类型的外壳扩展

原文参见:MSDN Magazine March 2000


编译/赵湘宁

第一部分 Windows 2000 UI 新特点之一:信息条提示(Infotip)
第二部分 Windows 2000 UI 新特点之二:自定义文件夹栏目
第三部分 Windows 2000 UI 新特点之三:搜索管理器

下载源代码

摘要:本文是关于Windows 2000 UI 新特点系列文章的第四篇,探讨几个其它的外壳扩展类型,如外壳执行、图标覆盖、磁盘清理管理程序、使用属性页的文件夹定制、以及上下文菜单。
     Windows 2000 还有三个新的外壳扩展:外壳执行管理器(shell execution handler)、图标覆盖管理器(icon overlay handler)和清理管理器(cleanup handler)。
     所谓“外壳执行”,是提供 IShellExecuteHook 接口的一个模块,这个接口导致自己的代码在某个命令行被外壳经由资源管理器或"运行"对话框处理之前被调用。IShellExecuteHook 接口与WH_SHELL没有什么关系,因为您的代码的执行先于目标程序的启动,而且都是在外壳的地址空间内工作。
     Windows 2000是第一个全面支持图标覆盖的Windows 版本。有关的接口有两个:IShellIconOverlay 和 IShellIconOverlayIdentifier。前者是为显示覆盖的名字空间扩展保留的。后者是允许您定义自制图像用于文件夹图标覆盖的主要接口。 图标覆盖是某种条件下外壳自动在图标左下角绘制的代表文件夹项目的一个小图像。典型的例子是快捷方式图标坐下角的小箭头,以及共享文件夹图标左下角的小手图标。这些用户看到的图标是结合在一起的两个重叠图标。这种机制在Windows 2000中被开放,已不是什么秘密。
    当绘制一个文件夹图标时,资源管理器试图从代表特定文件夹类型的名字空间获得一个IShellIconOverlay指针。如果这个接口存在,名字空间便有机会使用定制的项目。Windows 2000 的平台SDK文档中没有关于IShellIconOverlay 和IShellIconOverlayIdentifier接口的信息,但这两个接口实际上自从Windows 9x 和Windows NT 4.0的桌面更新引入一来就已经存在了。如果您在Windows 9x 和Windows NT 4.0 或更早的 OS 版本上编写代码,请参考 Q192055 文档包含的一些有用的技巧。

清除管理器

    Windows 98发布之初,微软制作了一个叫"磁盘清理(Disk Cleanup)"的实用程序挂在操作系统中(参见图十)。这个工具的目的是通过删除、压缩或备份无用的文件来释放磁盘空间。为此,"磁盘清理"的实用程序清除几个标准的文件夹中的内容,如:垃圾箱、下载的程序文件、临时的Internet 文件。

图十 磁盘清理程序

    通过写一个磁盘清理扩展,可以将新的入口增加到图十显示的对话框中以便管理特定的自制应用程序文件集。"磁盘清理"有一个模块化的结构并由一些系统级的处理器构成,您可以编写并注册自己的清理扩展。每一个扩展实现几个COM接口来与"磁盘清理"管理器通讯。
     编写清理扩展必须要创建一个暴露IEmptyVolumeCache2接口的COM对象。Windows 98 和Windows 2000中的清理扩展有一些细微的差别。在Windows 98中必须提供IEmptyVolumeCache接口,而在Windows 2000中还必须提供IEmptyVolumeCache2接口。IEmptyVolumeCache2接口是IEmptyVolumeCache接口的超集并加入了InitializeEx方法。
    下面是本文提供的一个很基本的清理扩展实现:

Cleanup Extension// IEmptyVolumeCache2Impl.h#include <AtlCom.h>#include <emptyvc.h>class ATL_NO_VTABLE IEmptyVolumeCache2Impl : public IEmptyVolumeCache2{public:    // IUnknown    STDMETHOD(QueryInterface)(REFIID riid, void** ppvObject) =         0;    _ATL_DEBUG_ADDREF_RELEASE_IMPL(IEmptyVolumeCache2Impl)    // IEmptyVolumeCache::Initialize    STDMETHOD(Initialize)(HKEY hkRegKey, LPCWSTR pcwszVolume,                           LPWSTR *ppwszDisplayName,                           LPWSTR *ppwszDescription,                           DWORD *pdwFlags){        // Allows to initialize a Windows 98 handler        MessageBox(0, _T("Initialize"), 0, 0);        return S_OK;    }    // IEmptyVolumeCache::Deactivate     STDMETHOD(Deactivate)(DWORD *pdwFlags){         // Called when the handler is going to be unloaded        MessageBox(0, _T("Deactivate"), 0, 0);        return S_OK;     }    // IEmptyVolumeCache::GetSpaceUsed    STDMETHOD(GetSpaceUsed)(DWORDLONG *pdwSpaceUsed,                             IEmptyVolumeCacheCallBack *picb){         // Returns the amount of space the handler can free        MessageBox(0, _T("GetSpaceUsed"), 0, 0);        return S_OK;      }    // IEmptyVolumeCache::Purge    STDMETHOD(Purge)(DWORDLONG dwSpaceToFree,                      IEmptyVolumeCacheCallBack *picb){         // Actually deletes the files        MessageBox(0, _T("Purge"), 0, 0);        return S_OK;     }    // IEmptyVolumeCache::ShowProperties    STDMETHOD(ShowProperties)(HWND hwnd){         // Provides a UI         MessageBox(0, _T("ShowProperties"), 0, 0);        return S_OK;     }    // IEmptyVolumeCache2::InitializeEx    STDMETHOD(InitializeEx)(HKEY hkRegKey, LPCWSTR pcwszVolume,                           LPCWSTR pcwszKeyName,                           LPWSTR *ppwszDisplayName,                           LPWSTR *ppwszDescription,                           LPWSTR *ppwszBtnText,                           DWORD *pdwFlags){        // Initializes the handler under Windows 2000        MessageBox(0, _T("InitializeEx"), 0, 0);        return S_OK;    }};// CleanSomething.h : Declaration of the CCleanSomething#ifndef __CLEANSOMETHING_H_#define __CLEANSOMETHING_H_#include "resource.h"               // main symbols#include "IEmptyVolumeCache2Impl.h" // IEmptyVolumeCache2/////////////////////////////////////////////////////////////////// CCleanSomethingclass ATL_NO_VTABLE

[1] [2] [3]  下一页

[] [返回上一页] [打 印]
  • 上一篇文章:Windows 2000 UI 新特点之一:信息条提示(Infotip)
  • 下一篇文章:Windows 2000 UI 新特点之二:自定义文件夹栏目

  • 相关文章:
  • 利用Windows命令查找木马病毒
  • Windows防火墙安全配置
  • 手动删除Windows系统中guest用户
  • [图文]如何加快Windows文件复制速度
  • [组图]自制救急Windows恢复盘
  • [组图]用好Windows系统桌面搜索
  • [图文]两则Windows XP操作系统实用技巧
  • Windows系统文件管理的八大技巧
  • 高手教你制作“百毒不侵”的Windows系统
  • Windows服务器下设置IIS的常见问题
  • [组图]Windows 7 Milestone1截图出现
  • Windows 2003网络负载均衡的实现方法
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 源码发布
Copyright © 2003-2009 Ymyasp.Com. All Rights Reserved .
备案序号:粤ICP备07029071号