【发布时间】:2009-10-18 17:11:07
【问题描述】:
有什么方法可以检测复制操作何时在 Windows 资源管理器中启动。
有点像 SuperCopier 中的:SuperCopier Website?
和操作中涉及的日志文件?诸如此类?
我浏览了 Supercopier 代码,但找不到处理检测复制操作的部分,因为我在 Delphi 中不流畅。
P.S : 似乎他们正在使用 Shell 扩展...但不确定。
【问题讨论】:
有什么方法可以检测复制操作何时在 Windows 资源管理器中启动。
有点像 SuperCopier 中的:SuperCopier Website?
和操作中涉及的日志文件?诸如此类?
我浏览了 Supercopier 代码,但找不到处理检测复制操作的部分,因为我在 Delphi 中不流畅。
P.S : 似乎他们正在使用 Shell 扩展...但不确定。
【问题讨论】:
是的,你可以。
你必须实现一个shell extension,它必须是hook the file copy operation。有很多关于如何在 C++ 中(使用本机 Win32 API)以及使用 C# 或其他 .NET 框架语言来完成这些事情的示例。我相信你也可以使用 Delphi,但我不知道进行 Win32 API 调用所涉及的细节..
这是一篇详细介绍implementation of a simple shell extension in C#的文章。
当然,您可能还想看看 windows 文件 I/O 过滤器,尽管它们只允许您观察文件操作,例如创建、复制、更改或删除。在 .NET 中,使用 System.IO.FileSystemWatcher class 创建文件 I/O 过滤器很简单,如果您只想 detect 和 log 这样的文件复制操作,那么您可能就是需要做的。
注意 如果您决定在 C# 中实现 shell 扩展,您应该知道它只能在已安装 .NET 框架的操作系统上运行(您用于创建扩展名)——尽管现在大多数人至少拥有 .NET 1.1 和 2.0..
【讨论】:
在安装delphi文件夹\Demos\ActiveX\ShellExt\copyhook.dpr中可以找到创建复制挂钩shell扩展的示例
这里还有另一个例子
再见。
【讨论】:
您不需要任何 Shell 扩展。
您只需要挂钩 Shell api。
【讨论】:
检测 Windows 资源管理器的最简单方法是检查 Clipboard。当然,它不适用于拖放案例、mcd 命令或 TotalCommander。
【讨论】: