EVCF_OUTOFDISKSPACE与EVCF_SETTINGSMODE用于工具传递给插件的设定。EVCF_OUTOFDISKSPACE表示当前硬盘的空余空间非常有限,需要尽可能多地清理,即使是系统的性能会受到影响。EVCF_SETTINGSMODE表示可定期执行的无人控制模式。在此模式下,GetSpaceUsed,Purge,及ShowProperties都将不予调用,所有清理任务应予InitializeEx时执行。其它旗标用于插件传递给工具的不同运行模式。EVCF_DONTSHOWIFZERO表示在没有找到可删除文件时不显示此类型,EVCF_ENABLEBYDEFAULT表示此类型文件可以安全删除,EVCF_ENABLEBYDEFAULT_AUTO表示此类型文件可以非常安全的删除,EVCF_HASSETTINGS表示此插件支持ShowProperties功能,可以显示详细信息。EVCF_REMOVEFROMLIST表示是一次性清理任务,清理工具在执行后自动将插件关闭,以后不再执行。

图1 清理工具的主界面
实现方法
我们开发一个新的清理工具插件,扫描并清理*.TMP文件。COM的编程有多种方法,我们选择了ATL库。关于ATL库的运用。
我们在Visual Studio .Net 2003中生成新的ATL的DLL Server项目,并使用Add Class加入新的ATL Simple Object控件类CCleanSimpleHandler.在定义中,我们让CCleanSimpleHandler从IEmptyVolumeCache2继承。并且,我们添加了下列变量:
// 储存扫描出文件的大小 |
然后,我们一一实现IEmptyVolumeCache及IEmptyVolumeCache2接口的函数。在下面的代码列表中,没有包括严格的检查错误返回值。这是为了简短代码的长度,提高可读性。在实际应用中,检查错误返回值是不可少的。为了不同版本Windows兼容,我们在InitializeEx中调用Initialize.
HRESULT CCleanSimpleHandler::InitializeEx (HKEY hKey, LPCWSTR pcwszVolume, |
在GetSpaceUsed中,我们调用ScanDir来扫描*.TMP文件,储存在m_lstFilesToDel中。GetSpaceUsed的第二个参数是IEmptyVolumeCacheCallBack接口的指针,用于调用其ScanProgress函数以报告扫描的进展情况。ScanProgress函数定义是:
HRESULT ScanProgress(DWORDLONG dwlSpaceUsed, DWORD dwFlags, LPCWSTR pwszReserved);

